diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/Inc/main.h b/Inc/main.h deleted file mode 100644 index ec286e1..0000000 --- a/Inc/main.h +++ /dev/null @@ -1,168 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file : main.h - * @brief : Header for main.c file. - * This file contains the common defines of the application. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2020 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __MAIN_H -#define __MAIN_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f4xx_hal.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ - -/* USER CODE END Includes */ - -/* Exported types ------------------------------------------------------------*/ -/* USER CODE BEGIN ET */ -extern SRAM_HandleTypeDef hsram1; -/* USER CODE END ET */ - -/* Exported constants --------------------------------------------------------*/ -/* USER CODE BEGIN EC */ -extern ADC_HandleTypeDef hadc1; -extern ADC_HandleTypeDef hadc2; -extern I2S_HandleTypeDef hi2s3; -extern SPI_HandleTypeDef hspi2; -extern RTC_HandleTypeDef hrtc; -extern PCD_HandleTypeDef hpcd_USB_OTG_FS; -extern DMA_HandleTypeDef hdma_memtomem_dma2_stream7; -extern DMA_HandleTypeDef hdma_memtomem_dma2_stream6; -extern DMA_HandleTypeDef hdma_memtomem_dma2_stream5; -extern DMA_HandleTypeDef hdma_memtomem_dma2_stream4; -extern DMA_HandleTypeDef hdma_memtomem_dma2_stream3; -extern DMA_HandleTypeDef hdma_memtomem_dma2_stream2; -extern DMA_HandleTypeDef hdma_memtomem_dma2_stream1; -extern DMA_HandleTypeDef hdma_memtomem_dma2_stream0; -/* USER CODE END EC */ - -/* Exported macro ------------------------------------------------------------*/ -/* USER CODE BEGIN EM */ - -/* USER CODE END EM */ - -/* Exported functions prototypes ---------------------------------------------*/ -void Error_Handler(void); - -/* USER CODE BEGIN EFP */ - -/* USER CODE END EFP */ - -/* Private defines -----------------------------------------------------------*/ -#define ENC_CLK_Pin GPIO_PIN_3 -#define ENC_CLK_GPIO_Port GPIOE -#define ENC_CLK_EXTI_IRQn EXTI3_IRQn -#define ENC2_SW_Pin GPIO_PIN_4 -#define ENC2_SW_GPIO_Port GPIOE -#define ENC_DT_Pin GPIO_PIN_5 -#define ENC_DT_GPIO_Port GPIOE -#define ENC2_DT_Pin GPIO_PIN_6 -#define ENC2_DT_GPIO_Port GPIOE -#define ENC2_CLK_Pin GPIO_PIN_13 -#define ENC2_CLK_GPIO_Port GPIOC -#define SWR_FORW_Pin GPIO_PIN_0 -#define SWR_FORW_GPIO_Port GPIOC -#define SWR_BACKW_Pin GPIO_PIN_1 -#define SWR_BACKW_GPIO_Port GPIOC -#define FPGA_CLK_Pin GPIO_PIN_2 -#define FPGA_CLK_GPIO_Port GPIOC -#define FPGA_SYNC_Pin GPIO_PIN_3 -#define FPGA_SYNC_GPIO_Port GPIOC -#define FPGA_BUS_D0_Pin GPIO_PIN_0 -#define FPGA_BUS_D0_GPIO_Port GPIOA -#define FPGA_BUS_D1_Pin GPIO_PIN_1 -#define FPGA_BUS_D1_GPIO_Port GPIOA -#define FPGA_BUS_D2_Pin GPIO_PIN_2 -#define FPGA_BUS_D2_GPIO_Port GPIOA -#define FPGA_BUS_D3_Pin GPIO_PIN_3 -#define FPGA_BUS_D3_GPIO_Port GPIOA -#define FPGA_BUS_D4_Pin GPIO_PIN_4 -#define FPGA_BUS_D4_GPIO_Port GPIOA -#define FPGA_BUS_D5_Pin GPIO_PIN_5 -#define FPGA_BUS_D5_GPIO_Port GPIOA -#define FPGA_BUS_D6_Pin GPIO_PIN_6 -#define FPGA_BUS_D6_GPIO_Port GPIOA -#define FPGA_BUS_D7_Pin GPIO_PIN_7 -#define FPGA_BUS_D7_GPIO_Port GPIOA -#define Power_IN_Pin GPIO_PIN_4 -#define Power_IN_GPIO_Port GPIOC -#define ALC_IN_Pin GPIO_PIN_5 -#define ALC_IN_GPIO_Port GPIOC -#define PTT_SW1_Pin GPIO_PIN_0 -#define PTT_SW1_GPIO_Port GPIOB -#define PTT_SW2_Pin GPIO_PIN_1 -#define PTT_SW2_GPIO_Port GPIOB -#define PTT_IN_Pin GPIO_PIN_2 -#define PTT_IN_GPIO_Port GPIOB -#define PTT_IN_EXTI_IRQn EXTI2_IRQn -#define AUDIO_48K_CLOCK_Pin GPIO_PIN_10 -#define AUDIO_48K_CLOCK_GPIO_Port GPIOB -#define AUDIO_48K_CLOCK_EXTI_IRQn EXTI15_10_IRQn -#define W25Q16_CS_Pin GPIO_PIN_12 -#define W25Q16_CS_GPIO_Port GPIOB -#define PERI_SCK_Pin GPIO_PIN_13 -#define PERI_SCK_GPIO_Port GPIOB -#define PERI_MISO_Pin GPIO_PIN_14 -#define PERI_MISO_GPIO_Port GPIOB -#define PERI_MOSI_Pin GPIO_PIN_15 -#define PERI_MOSI_GPIO_Port GPIOB -#define MUTE_Pin GPIO_PIN_7 -#define MUTE_GPIO_Port GPIOC -#define AD1_CS_Pin GPIO_PIN_8 -#define AD1_CS_GPIO_Port GPIOC -#define WM8731_WS_LRC_Pin GPIO_PIN_15 -#define WM8731_WS_LRC_GPIO_Port GPIOA -#define WM8731_BCLK_Pin GPIO_PIN_10 -#define WM8731_BCLK_GPIO_Port GPIOC -#define WM8731_ADC_SD_Pin GPIO_PIN_11 -#define WM8731_ADC_SD_GPIO_Port GPIOC -#define WM8731_DAC_SD_Pin GPIO_PIN_12 -#define WM8731_DAC_SD_GPIO_Port GPIOC -#define WM8731_SCK_Pin GPIO_PIN_3 -#define WM8731_SCK_GPIO_Port GPIOD -#define WM8731_SDA_Pin GPIO_PIN_6 -#define WM8731_SDA_GPIO_Port GPIOD -#define CPU_PW_HOLD_Pin GPIO_PIN_6 -#define CPU_PW_HOLD_GPIO_Port GPIOB -#define CPU_PW_Pin GPIO_PIN_7 -#define CPU_PW_GPIO_Port GPIOB -#define CPU_PW_EXTI_IRQn EXTI9_5_IRQn -#define KEY_IN_DASH_Pin GPIO_PIN_0 -#define KEY_IN_DASH_GPIO_Port GPIOE -#define KEY_IN_DASH_EXTI_IRQn EXTI0_IRQn -#define KEY_IN_DOT_Pin GPIO_PIN_1 -#define KEY_IN_DOT_GPIO_Port GPIOE -#define KEY_IN_DOT_EXTI_IRQn EXTI1_IRQn -/* USER CODE BEGIN Private defines */ - -/* USER CODE END Private defines */ - -#ifdef __cplusplus -} -#endif - -#endif /* __MAIN_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Inc/stm32f4xx_hal_conf.h b/Inc/stm32f4xx_hal_conf.h deleted file mode 100644 index d9cd266..0000000 --- a/Inc/stm32f4xx_hal_conf.h +++ /dev/null @@ -1,486 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_hal_conf_template.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32f4xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2017 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_HAL_CONF_H -#define __STM32F4xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED - - #define HAL_ADC_MODULE_ENABLED -/* #define HAL_CRYP_MODULE_ENABLED */ -/* #define HAL_CAN_MODULE_ENABLED */ -/* #define HAL_CRC_MODULE_ENABLED */ -/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ -/* #define HAL_CRYP_MODULE_ENABLED */ -/* #define HAL_DAC_MODULE_ENABLED */ -/* #define HAL_DCMI_MODULE_ENABLED */ -/* #define HAL_DMA2D_MODULE_ENABLED */ -/* #define HAL_ETH_MODULE_ENABLED */ -/* #define HAL_NAND_MODULE_ENABLED */ -/* #define HAL_NOR_MODULE_ENABLED */ -/* #define HAL_PCCARD_MODULE_ENABLED */ -#define HAL_SRAM_MODULE_ENABLED -/* #define HAL_SDRAM_MODULE_ENABLED */ -/* #define HAL_HASH_MODULE_ENABLED */ -/* #define HAL_I2C_MODULE_ENABLED */ -#define HAL_I2S_MODULE_ENABLED -/* #define HAL_IWDG_MODULE_ENABLED */ -/* #define HAL_LTDC_MODULE_ENABLED */ -/* #define HAL_RNG_MODULE_ENABLED */ -#define HAL_RTC_MODULE_ENABLED -/* #define HAL_SAI_MODULE_ENABLED */ -/* #define HAL_SD_MODULE_ENABLED */ -/* #define HAL_MMC_MODULE_ENABLED */ -#define HAL_SPI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -/* #define HAL_UART_MODULE_ENABLED */ -/* #define HAL_USART_MODULE_ENABLED */ -/* #define HAL_IRDA_MODULE_ENABLED */ -/* #define HAL_SMARTCARD_MODULE_ENABLED */ -/* #define HAL_SMBUS_MODULE_ENABLED */ -/* #define HAL_WWDG_MODULE_ENABLED */ -#define HAL_PCD_MODULE_ENABLED -/* #define HAL_HCD_MODULE_ENABLED */ -/* #define HAL_DSI_MODULE_ENABLED */ -/* #define HAL_QSPI_MODULE_ENABLED */ -/* #define HAL_QSPI_MODULE_ENABLED */ -/* #define HAL_CEC_MODULE_ENABLED */ -/* #define HAL_FMPI2C_MODULE_ENABLED */ -/* #define HAL_SPDIFRX_MODULE_ENABLED */ -/* #define HAL_DFSDM_MODULE_ENABLED */ -/* #define HAL_LPTIM_MODULE_ENABLED */ -#define HAL_GPIO_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED - -/* ########################## HSE/HSI Values adaptation ##################### */ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE ((uint32_t)8000000U) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT ((uint32_t)100U) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE ((uint32_t)16000000U) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE ((uint32_t)32000U) /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ -/** - * @brief External Low Speed oscillator (LSE) value. - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE ((uint32_t)32768U) /*!< Value of the External Low Speed oscillator in Hz */ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT ((uint32_t)5000U) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for I2S peripheral - * This value is used by the I2S HAL module to compute the I2S clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - */ -#if !defined (EXTERNAL_CLOCK_VALUE) - #define EXTERNAL_CLOCK_VALUE ((uint32_t)12288000U) /*!< Value of the External audio frequency in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE ((uint32_t)3300U) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((uint32_t)0U) /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U -#define INSTRUCTION_CACHE_ENABLE 1U -#define DATA_CACHE_ENABLE 1U - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ -#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U /* DFSDM register callback disabled */ -#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U /* DMA2D register callback disabled */ -#define USE_HAL_DSI_REGISTER_CALLBACKS 0U /* DSI register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_FMPI2C_REGISTER_CALLBACKS 0U /* FMPI2C register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ -#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U /* QSPI register callback disabled */ -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Ethernet peripheral configuration ##################### */ - -/* Section 1 : Ethernet peripheral configuration */ - -/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ -#define MAC_ADDR0 2U -#define MAC_ADDR1 0U -#define MAC_ADDR2 0U -#define MAC_ADDR3 0U -#define MAC_ADDR4 0U -#define MAC_ADDR5 0U - -/* Definition of the Ethernet driver buffers size and count */ -#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ -#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ -#define ETH_RXBUFNB ((uint32_t)4U) /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ -#define ETH_TXBUFNB ((uint32_t)4U) /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ - -/* Section 2: PHY configuration section */ - -/* DP83848_PHY_ADDRESS Address*/ -#define DP83848_PHY_ADDRESS 0x01U -/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ -#define PHY_RESET_DELAY ((uint32_t)0x000000FFU) -/* PHY Configuration delay */ -#define PHY_CONFIG_DELAY ((uint32_t)0x00000FFFU) - -#define PHY_READ_TO ((uint32_t)0x0000FFFFU) -#define PHY_WRITE_TO ((uint32_t)0x0000FFFFU) - -/* Section 3: Common PHY Registers */ - -#define PHY_BCR ((uint16_t)0x0000U) /*!< Transceiver Basic Control Register */ -#define PHY_BSR ((uint16_t)0x0001U) /*!< Transceiver Basic Status Register */ - -#define PHY_RESET ((uint16_t)0x8000U) /*!< PHY Reset */ -#define PHY_LOOPBACK ((uint16_t)0x4000U) /*!< Select loop-back mode */ -#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100U) /*!< Set the full-duplex mode at 100 Mb/s */ -#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000U) /*!< Set the half-duplex mode at 100 Mb/s */ -#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100U) /*!< Set the full-duplex mode at 10 Mb/s */ -#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000U) /*!< Set the half-duplex mode at 10 Mb/s */ -#define PHY_AUTONEGOTIATION ((uint16_t)0x1000U) /*!< Enable auto-negotiation function */ -#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200U) /*!< Restart auto-negotiation function */ -#define PHY_POWERDOWN ((uint16_t)0x0800U) /*!< Select the power down mode */ -#define PHY_ISOLATE ((uint16_t)0x0400U) /*!< Isolate PHY from MII */ - -#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020U) /*!< Auto-Negotiation process completed */ -#define PHY_LINKED_STATUS ((uint16_t)0x0004U) /*!< Valid link established */ -#define PHY_JABBER_DETECTION ((uint16_t)0x0002U) /*!< Jabber condition detected */ - -/* Section 4: Extended PHY Registers */ -#define PHY_SR ((uint16_t)0x10U) /*!< PHY status register Offset */ - -#define PHY_SPEED_STATUS ((uint16_t)0x0002U) /*!< PHY Speed mask */ -#define PHY_DUPLEX_STATUS ((uint16_t)0x0004U) /*!< PHY Duplex mask */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver -* Activated: CRC code is present inside driver -* Deactivated: CRC code cleaned from driver -*/ - -#define USE_SPI_CRC 0U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32f4xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32f4xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32f4xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32f4xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32f4xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32f4xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED - #include "stm32f4xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CAN_LEGACY_MODULE_ENABLED - #include "stm32f4xx_hal_can_legacy.h" -#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32f4xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32f4xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DMA2D_MODULE_ENABLED - #include "stm32f4xx_hal_dma2d.h" -#endif /* HAL_DMA2D_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32f4xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED - #include "stm32f4xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_ETH_MODULE_ENABLED - #include "stm32f4xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32f4xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32f4xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32f4xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED - #include "stm32f4xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_PCCARD_MODULE_ENABLED - #include "stm32f4xx_hal_pccard.h" -#endif /* HAL_PCCARD_MODULE_ENABLED */ - -#ifdef HAL_SDRAM_MODULE_ENABLED - #include "stm32f4xx_hal_sdram.h" -#endif /* HAL_SDRAM_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED - #include "stm32f4xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32f4xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32f4xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32f4xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32f4xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LTDC_MODULE_ENABLED - #include "stm32f4xx_hal_ltdc.h" -#endif /* HAL_LTDC_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32f4xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32f4xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32f4xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED - #include "stm32f4xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32f4xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32f4xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32f4xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32f4xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32f4xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32f4xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32f4xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32f4xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32f4xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED - #include "stm32f4xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_DSI_MODULE_ENABLED - #include "stm32f4xx_hal_dsi.h" -#endif /* HAL_DSI_MODULE_ENABLED */ - -#ifdef HAL_QSPI_MODULE_ENABLED - #include "stm32f4xx_hal_qspi.h" -#endif /* HAL_QSPI_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED - #include "stm32f4xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_FMPI2C_MODULE_ENABLED - #include "stm32f4xx_hal_fmpi2c.h" -#endif /* HAL_FMPI2C_MODULE_ENABLED */ - -#ifdef HAL_SPDIFRX_MODULE_ENABLED - #include "stm32f4xx_hal_spdifrx.h" -#endif /* HAL_SPDIFRX_MODULE_ENABLED */ - -#ifdef HAL_DFSDM_MODULE_ENABLED - #include "stm32f4xx_hal_dfsdm.h" -#endif /* HAL_DFSDM_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED - #include "stm32f4xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED - #include "stm32f4xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F4xx_HAL_CONF_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Inc/stm32f4xx_it.h b/Inc/stm32f4xx_it.h deleted file mode 100644 index 8dc0a63..0000000 --- a/Inc/stm32f4xx_it.h +++ /dev/null @@ -1,89 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file stm32f4xx_it.h - * @brief This file contains the headers of the interrupt handlers. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2020 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_IT_H -#define __STM32F4xx_IT_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ - -/* USER CODE END Includes */ - -/* Exported types ------------------------------------------------------------*/ -/* USER CODE BEGIN ET */ - -/* USER CODE END ET */ - -/* Exported constants --------------------------------------------------------*/ -/* USER CODE BEGIN EC */ - -/* USER CODE END EC */ - -/* Exported macro ------------------------------------------------------------*/ -/* USER CODE BEGIN EM */ - -/* USER CODE END EM */ - -/* Exported functions prototypes ---------------------------------------------*/ -void NMI_Handler(void); -void HardFault_Handler(void); -void MemManage_Handler(void); -void BusFault_Handler(void); -void UsageFault_Handler(void); -void SVC_Handler(void); -void DebugMon_Handler(void); -void PendSV_Handler(void); -void SysTick_Handler(void); -void EXTI0_IRQHandler(void); -void EXTI1_IRQHandler(void); -void EXTI2_IRQHandler(void); -void EXTI3_IRQHandler(void); -void DMA1_Stream0_IRQHandler(void); -void DMA1_Stream5_IRQHandler(void); -void EXTI9_5_IRQHandler(void); -void TIM3_IRQHandler(void); -void TIM4_IRQHandler(void); -void EXTI15_10_IRQHandler(void); -void TIM8_UP_TIM13_IRQHandler(void); -void TIM5_IRQHandler(void); -void SPI3_IRQHandler(void); -void TIM6_DAC_IRQHandler(void); -void TIM7_IRQHandler(void); -void DMA2_Stream1_IRQHandler(void); -void DMA2_Stream2_IRQHandler(void); -void OTG_FS_IRQHandler(void); -void DMA2_Stream5_IRQHandler(void); -void DMA2_Stream6_IRQHandler(void); -/* USER CODE BEGIN EFP */ - -/* USER CODE END EFP */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F4xx_IT_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Src/agc.c b/Src/agc.c deleted file mode 100644 index 0a1feac..0000000 --- a/Src/agc.c +++ /dev/null @@ -1,118 +0,0 @@ -#include "stm32f4xx_hal.h" -#include "agc.h" -#include "settings.h" -#include "audio_filters.h" - -//Private variables -static float32_t AGC_RX_need_gain_db = 0.0f; -static float32_t AGC_RX_need_gain_db_old = 0.0f; -IRAM2 static float32_t AGC_RX_ringbuffer[AGC_RINGBUFFER_TAPS_SIZE * AUDIO_BUFFER_HALF_SIZE] = {0}; - -//Run AGC on data block -void DoRxAGC(float32_t *agcBuffer, uint_fast16_t blockSize, uint_fast8_t mode) -{ - //RX1 or RX2 - float32_t *AGC_need_gain_db = &AGC_RX_need_gain_db; - float32_t *AGC_need_gain_db_old = &AGC_RX_need_gain_db_old; - float32_t *agc_ringbuffer = (float32_t*)&AGC_RX_ringbuffer; - - //higher speed in settings - higher speed of AGC processing - float32_t RX_AGC_STEPSIZE_UP = 0.0f; - float32_t RX_AGC_STEPSIZE_DOWN = 0.0f; - if(mode == TRX_MODE_CW_L || mode == TRX_MODE_CW_U) - { - RX_AGC_STEPSIZE_UP = 200.0f / (float32_t)TRX.RX_AGC_CW_speed; - RX_AGC_STEPSIZE_DOWN = 20.0f / (float32_t)TRX.RX_AGC_CW_speed; - } - else - { - RX_AGC_STEPSIZE_UP = 200.0f / (float32_t)TRX.RX_AGC_SSB_speed; - RX_AGC_STEPSIZE_DOWN = 20.0f / (float32_t)TRX.RX_AGC_SSB_speed; - } - - //do ring buffer - static uint32_t ring_position = 0; - //save new data to ring buffer - memcpy(&agc_ringbuffer[ring_position * blockSize], agcBuffer, sizeof(float32_t) * blockSize); - //move ring buffer index - ring_position++; - if(ring_position >= AGC_RINGBUFFER_TAPS_SIZE) - ring_position = 0; - //get old data to process - memcpy(agcBuffer, &agc_ringbuffer[ring_position * blockSize], sizeof(float32_t) * blockSize); - - //calculate the magnitude in dBFS - float32_t AGC_RX_magnitude = 0; - arm_rms_f32(agcBuffer, blockSize, &AGC_RX_magnitude); - if (AGC_RX_magnitude == 0.0f) - AGC_RX_magnitude = 0.001f; - float32_t full_scale_rate = AGC_RX_magnitude / FLOAT_FULL_SCALE_POW; - float32_t AGC_RX_dbFS = rate2dbV(full_scale_rate); - - //move the gain one step - if(!WM8731_Muting) - { - float32_t diff = ((float32_t)TRX.AGC_GAIN_TARGET - (AGC_RX_dbFS + *AGC_need_gain_db)); - if (diff > 0) - *AGC_need_gain_db += diff / RX_AGC_STEPSIZE_UP; - else - *AGC_need_gain_db += diff / RX_AGC_STEPSIZE_DOWN; - - //overload (clipping), sharply reduce the gain - if ((AGC_RX_dbFS + *AGC_need_gain_db) > ((float32_t)TRX.AGC_GAIN_TARGET + AGC_CLIPPING)) - { - *AGC_need_gain_db = (float32_t)TRX.AGC_GAIN_TARGET - AGC_RX_dbFS; - //sendToDebug_float32(diff,false); - } - } - - //noise threshold, below it - do not amplify - /*if (AGC_RX_dbFS < AGC_NOISE_GATE) - *AGC_need_gain_db = 1.0f;*/ - - //AGC off, not adjustable - if (!CurrentVFO()->AGC) - *AGC_need_gain_db = 1.0f; - - //Muting if need - if(WM8731_Muting) - *AGC_need_gain_db = -200.0f; - - //gain limitation - if (*AGC_need_gain_db > AGC_MAX_GAIN) - *AGC_need_gain_db = AGC_MAX_GAIN; - - //apply gain - if (fabsf(*AGC_need_gain_db_old - *AGC_need_gain_db) > 0.0f) //gain changed - { - float32_t gainApplyStep = 0; - if (*AGC_need_gain_db_old > *AGC_need_gain_db) - gainApplyStep = -(*AGC_need_gain_db_old - *AGC_need_gain_db) / (float32_t)blockSize; - if (*AGC_need_gain_db_old < *AGC_need_gain_db) - gainApplyStep = (*AGC_need_gain_db - *AGC_need_gain_db_old) / (float32_t)blockSize; - float32_t val_prev = 0.0f; - bool zero_cross = false; - for (uint_fast16_t i = 0; i < blockSize; i++) - { - if(val_prev < 0.0f && agcBuffer[i] > 0.0f) - zero_cross = true; - else if(val_prev > 0.0f && agcBuffer[i] < 0.0f) - zero_cross = true; - if(zero_cross) - *AGC_need_gain_db_old += gainApplyStep; - - agcBuffer[i] = agcBuffer[i] * db2rateV(*AGC_need_gain_db_old); - val_prev = agcBuffer[i]; - } - } - else //gain did not change, apply gain across all samples - { - arm_scale_f32(agcBuffer, db2rateV(*AGC_need_gain_db), agcBuffer, blockSize); - } -} - -void ResetAGC(void) -{ - AGC_RX_need_gain_db = 0.0f; - memset(AGC_RX_ringbuffer, 0x00, sizeof(AGC_RX_ringbuffer)); -} diff --git a/Src/agc.h b/Src/agc.h deleted file mode 100644 index dfa9967..0000000 --- a/Src/agc.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef AGC_H -#define AGC_H - -#include "stm32f4xx_hal.h" -#include -#include "audio_processor.h" - -#define AGC_RINGBUFFER_TAPS_SIZE 3 - -//Public methods -extern void DoRxAGC(float32_t *agcbuffer, uint_fast16_t blockSize, uint_fast8_t mode); // start AGC on a data block -extern void ResetAGC(void); - -#endif diff --git a/Src/audio_filters.c b/Src/audio_filters.c deleted file mode 100644 index f6cfe9e..0000000 --- a/Src/audio_filters.c +++ /dev/null @@ -1,741 +0,0 @@ -#include "audio_filters.h" -#include "stm32f4xx_hal.h" -#include -#include -#include -#include -#include "arm_math.h" -#include "functions.h" -#include "wm8731.h" -#include "settings.h" -#include "auto_notch.h" -#include "trx_manager.h" - -//Private variables -static float32_t Fir_RX_Hilbert_State_I[FIR_RX_HILBERT_STATE_SIZE] = {0}; // buffers of filter states -static float32_t Fir_RX_Hilbert_State_Q[FIR_RX_HILBERT_STATE_SIZE] = {0}; -static float32_t Fir_Tx_Hilbert_State_I[FIR_TX_HILBERT_STATE_SIZE] = {0}; -static float32_t Fir_Tx_Hilbert_State_Q[FIR_TX_HILBERT_STATE_SIZE] = {0}; -static float32_t IIR_RX_LPF_I_State[IIR_RX_LPF_Taps_STATE_SIZE] = {0}; -static float32_t IIR_RX_LPF_Q_State[IIR_RX_LPF_Taps_STATE_SIZE] = {0}; -static float32_t IIR_RX_GAUSS_State[IIR_RX_GAUSS_Taps_STATE_SIZE] = {0}; -static float32_t IIR_TX_LPF_I_State[IIR_RX_LPF_Taps_STATE_SIZE] = {0}; -static float32_t IIR_RX_HPF_I_State[IIR_RX_HPF_Taps_STATE_SIZE] = {0}; -static float32_t IIR_TX_HPF_I_State[IIR_RX_HPF_Taps_STATE_SIZE] = {0}; -static float32_t IIR_RX_HPF_SQL_State[IIR_RX_HPF_SQL_STATE_SIZE] = {0}; -static float32_t EQ_RX_LOW_FILTER_State[2 * EQ_STAGES] = {0}; -static float32_t EQ_RX_MID_FILTER_State[2 * EQ_STAGES] = {0}; -static float32_t EQ_RX_HIG_FILTER_State[2 * EQ_STAGES] = {0}; -static float32_t EQ_RX_LOW_FILTER_Coeffs[BIQUAD_COEFF_IN_STAGE * EQ_STAGES] = {0}; -static float32_t EQ_RX_MID_FILTER_Coeffs[BIQUAD_COEFF_IN_STAGE * EQ_STAGES] = {0}; -static float32_t EQ_RX_HIG_FILTER_Coeffs[BIQUAD_COEFF_IN_STAGE * EQ_STAGES] = {0}; -static float32_t EQ_MIC_LOW_FILTER_State[2 * EQ_STAGES] = {0}; -static float32_t EQ_MIC_MID_FILTER_State[2 * EQ_STAGES] = {0}; -static float32_t EQ_MIC_HIG_FILTER_State[2 * EQ_STAGES] = {0}; -static float32_t EQ_MIC_LOW_FILTER_Coeffs[BIQUAD_COEFF_IN_STAGE * EQ_STAGES] = {0}; -static float32_t EQ_MIC_MID_FILTER_Coeffs[BIQUAD_COEFF_IN_STAGE * EQ_STAGES] = {0}; -static float32_t EQ_MIC_HIG_FILTER_Coeffs[BIQUAD_COEFF_IN_STAGE * EQ_STAGES] = {0}; - -static DC_filter_state_type DC_Filter_State[8] = {0}; // states of the DC corrector - -// Collection of filters -//IQ Hilbert with (+45 q / -45 i) degrees phase added, 48000 sampling frequency Fc=1.95kHz, BW=4.53kHz Sinc, Raised Cosine 0.910 // Iowa Hills Hilbert Filters -//static const float32_t FIR_HILB_I_coeffs[IQ_HILBERT_TAPS] = {223.7509881945750E-9, 948.5448959443470E-9, 2.239548070940360E-6, 4.104081513478730E-6, 6.473278399896580E-6, 9.243363618311680E-6, 0.000012375306830145, 0.000016008470118094, 0.000020514831353058, 0.000026428582704618, 0.000034238287518054, 0.000044107685972401, 0.000055658388468059, 0.000067960735122181, 0.000079814414911969, 0.000090271019268658, 0.000099208267996747, 0.000107682375571142, 0.000117820188231993, 0.000132178448300499, 0.000152741505943579, 0.000179946397181736, 0.000212200254787838, 0.000246219865497213, 0.000278197754411937, 0.000305403847133994, 0.000327547176022056, 0.000347211639892836, 0.000369004605143288, 0.000397624259417610, 0.000435628238606010, 0.000481985678838541, 0.000532308421669435, 0.000580973374933797, 0.000624402160968576, 0.000663975552226445, 0.000706866273201483, 0.000763718418281774, 0.000843470610359944, 0.000947212263362751, 0.001064042332409273, 0.001171796460180425, 0.001243951997037104, 0.001261369267521314, 0.001224751811749544, 0.001162086034885813, 0.001125920875792500, 0.001178490669945493, 0.001367614744816024, 0.001701279127048149, 0.002131623535440460, 0.002557937761052193, 0.002852717842663536, 0.002906138181592429, 0.002675393927642395, 0.002219948090046554, 0.001704839436171120, 0.001362891287901267, 0.001421041702098347, 0.002011509947420330, 0.003099138284411245, 0.004456751183384506, 0.005708484289066565, 0.006438931350315933, 0.006340243026888855, 0.005349242515151897, 0.003720982515017856, 0.001998787552236407, 0.000872042233036055, 0.000953170264748813, 0.002540912444746210, 0.005454091829370742, 0.009009087200446018, 0.012174602696360195, 0.013878843787567130, 0.013385124179631247, 0.010613479505888278, 0.006285039489443841, 0.001808717781247508, -0.001092430678638297, -0.000927283437365230, 0.003006301950665575, 0.010243640800918661, 0.019112611427735394, 0.027098107257607106, 0.031553929105355837, 0.030581250057604290, 0.023812767466428037, 0.012836160782847062, 0.001069713701562541, -0.006949315019545316, -0.006726605747478962, 0.004866458991959632, 0.028477691298525291, 0.061710400362786785, 0.099325780000166744, 0.134224240487393925, 0.158999573746049172, 0.167687454575943418, 0.157256673476852710, 0.128442847558250611, 0.085689313488739788, 0.036193922460058224, -0.011702019132317934, -0.050372660860353115, -0.074543394440449343, -0.082300601206559604, -0.075248447552329234, -0.057817989610136365, -0.035955570364459531, -0.015567203459010078, -0.001134744675231588, 0.005157014696688749, 0.003607309109247389, -0.003474931963170549, -0.012705711479376576, -0.020715053812433180, -0.025075301617804493, -0.024833661635348364, -0.020552614868337892, -0.013912891586523883, -0.007052065843042134, -0.001866246821034922, 0.000516223781271204, -0.000041989114492909, -0.002791021180205989, -0.006447927676302333, -0.009659645602751786, -0.011419791177594530, -0.011319648039713963, -0.009580882713672524, -0.006891697580158546, -0.004125421384087170, -0.002045398082686481, -0.001089117339142527, -0.001286193727599866, -0.002314945400675894, -0.003658321010890728, -0.004794865749544438, -0.005359485571258614, -0.005228661686680162, -0.004515964267980362, -0.003494458365862956, -0.002483052706789675, -0.001739036113379079, -0.001389760063268084, -0.001418064078799173, -0.001696122343817232, -0.002047716179087368, -0.002313436442110995, -0.002397200313346026, -0.002282760930956755, -0.002020990464106081, -0.001698228383151980, -0.001400181098315894, -0.001184326559787539, -0.001068152544581845, -0.001033582851205000, -0.001042310654116016, -0.001054161971946344, -0.001041346771202241, -0.000994567685711711, -0.000920829128941494, -0.000835855182120961, -0.000755329158990894, -0.000688603234807107, -0.000636705673632633, -0.000594357900905697, -0.000554181925717891, -0.000510804932678112, -0.000463118664475597, -0.000414096319555456, -0.000368727521834393, -0.000331328678648681, -0.000303524506053571, -0.000283683901660525, -0.000267842266116449, -0.000251506689829605, -0.000231463646998481, -0.000206844002176803, -0.000179121332298031, -0.000151204743056522, -0.000126126266083465, -0.000105901672116307, -0.000090974893900219, -0.000080352409047133, -0.000072242785698550, -0.000064854267073064, -0.000057011646034372, -0.000048396414268341, -0.000039406214264031, -0.000030781942374507, -0.000023208699143715, -0.000017056318020772, -0.000012325180003317, -8.759613105575410E-6, -6.029969405701850E-6, -3.882492263574330E-6, -2.200025615965410E-6, -975.1397524474980E-9, -239.2027170806280E-9}; -//static const float32_t FIR_HILB_Q_coeffs[IQ_HILBERT_TAPS] = {-239.2027170806560E-9, -975.1397524476660E-9, -2.200025615965810E-6, -3.882492263574850E-6, -6.029969405702120E-6, -8.759613105574830E-6, -0.000012325180003315, -0.000017056318020768, -0.000023208699143709, -0.000030781942374500, -0.000039406214264024, -0.000048396414268337, -0.000057011646034372, -0.000064854267073069, -0.000072242785698559, -0.000080352409047147, -0.000090974893900237, -0.000105901672116327, -0.000126126266083482, -0.000151204743056535, -0.000179121332298038, -0.000206844002176803, -0.000231463646998477, -0.000251506689829601, -0.000267842266116452, -0.000283683901660539, -0.000303524506053597, -0.000331328678648716, -0.000368727521834428, -0.000414096319555478, -0.000463118664475595, -0.000510804932678080, -0.000554181925717832, -0.000594357900905625, -0.000636705673632569, -0.000688603234807070, -0.000755329158990898, -0.000835855182121003, -0.000920829128941556, -0.000994567685711768, -0.001041346771202267, -0.001054161971946331, -0.001042310654115978, -0.001033582851204978, -0.001068152544581889, -0.001184326559787687, -0.001400181098316153, -0.001698228383152308, -0.002020990464106389, -0.002282760930956934, -0.002397200313345985, -0.002313436442110709, -0.002047716179086903, -0.001696122343816746, -0.001418064078798878, -0.001389760063268167, -0.001739036113379629, -0.002483052706790617, -0.003494458365864043, -0.004515964267981224, -0.005228661686680431, -0.005359485571258059, -0.004794865749543089, -0.003658321010888926, -0.002314945400674231, -0.001286193727599023, -0.001089117339143038, -0.002045398082688510, -0.004125421384090377, -0.006891697580162112, -0.009580882713675352, -0.011319648039715023, -0.011419791177593237, -0.009659645602748290, -0.006447927676297602, -0.002791021180201610, -0.000041989114490631, 0.000516223781270046, -0.001866246821039895, -0.007052065843050045, -0.013912891586532689, -0.020552614868344893, -0.024833661635351008, -0.025075301617801304, -0.020715053812424448, -0.012705711479364563, -0.003474931963159146, 0.003607309109253661, 0.005157014696686077, -0.001134744675244962, -0.015567203459032938, -0.035955570364487460, -0.057817989610162497, -0.075248447552345707, -0.082300601206559548, -0.074543394440428748, -0.050372660860312120, -0.011702019132261260, 0.036193922460122083, 0.085689313488800323, 0.128442847558297574, 0.157256673476878356, 0.167687454575944500, 0.158999573746027162, 0.134224240487354735, 0.099325780000119254, 0.061710400362740524, 0.028477691298488390, 0.004866458991937123, -0.006726605747485966, -0.006949315019539358, 0.001069713701576379, 0.012836160782862767, 0.023812767466440302, 0.030581250057609779, 0.031553929105353769, 0.027098107257598970, 0.019112611427724233, 0.010243640800907937, 0.003006301950658107, -0.000927283437367983, -0.001092430678636460, 0.001808717781252494, 0.006285039489449838, 0.010613479505893192, 0.013385124179633633, 0.013878843787566531, 0.012174602696357130, 0.009009087200441680, 0.005454091829366533, 0.002540912444743289, 0.000953170264747782, 0.000872042233036866, 0.001998787552238471, 0.003720982515020316, 0.005349242515153926, 0.006340243026889902, 0.006438931350315841, 0.005708484289065552, 0.004456751183383028, 0.003099138284409812, 0.002011509947419342, 0.001421041702097986, 0.001362891287901485, 0.001704839436171697, 0.002219948090047204, 0.002675393927642869, 0.002906138181592586, 0.002852717842663368, 0.002557937761051797, 0.002131623535439987, 0.001701279127047741, 0.001367614744815772, 0.001178490669945418, 0.001125920875792563, 0.001162086034885941, 0.001224751811749666, 0.001261369267521385, 0.001243951997037112, 0.001171796460180390, 0.001064042332409229, 0.000947212263362729, 0.000843470610359959, 0.000763718418281822, 0.000706866273201547, 0.000663975552226500, 0.000624402160968601, 0.000580973374933785, 0.000532308421669388, 0.000481985678838475, 0.000435628238605942, 0.000397624259417553, 0.000369004605143252, 0.000347211639892820, 0.000327547176022054, 0.000305403847133999, 0.000278197754411941, 0.000246219865497210, 0.000212200254787827, 0.000179946397181720, 0.000152741505943561, 0.000132178448300484, 0.000117820188231982, 0.000107682375571138, 0.000099208267996750, 0.000090271019268667, 0.000079814414911980, 0.000067960735122194, 0.000055658388468071, 0.000044107685972409, 0.000034238287518059, 0.000026428582704620, 0.000020514831353058, 0.000016008470118092, 0.000012375306830142, 9.243363618309360E-6, 6.473278399895030E-6, 4.104081513477980E-6, 2.239548070940140E-6, 948.5448959443480E-9, 223.7509881945930E-9}; -static const float32_t FIR_HILB_Q_coeffs[IQ_HILBERT_TAPS] = {-5.702029823289780E-6,-0.000039219921881772,-0.000125961068157237,-0.000270915868650029,-0.000435993654001520,-0.000540377608401144,-0.000497504547388838,-0.000282830558176925,-2.421702967718130E-6,0.000082954298431622,-0.000382670153833527,-0.001700621211116391,-0.003920158431250949,-0.006681314536912206,-0.009200409429965023,-0.010466629248141970,-0.009637173648363497,-0.006516625440883324,-0.001926794263403978,0.002239659354791165,0.003411293934926346,-0.000850063052119150,-0.011826169645843291,-0.028755507153826302,-0.048456557469219834,-0.065717656839010666,-0.074471271884586326,-0.069486353007572735,-0.048086624492331379,-0.011328593299850849,0.035805263058567308,0.085352373172954799,0.128243450680040061,0.156577648180890816,0.165625340599039911,0.154958903256784741,0.128386567929334255,0.092744251946634576,0.055953014535082536,0.024955620998299490,0.004140778180043780,-0.005338445681787938,-0.005262344892036169,0.000716546420940858,0.008462390387404947,0.014602504124462335,0.017281600304896699,0.016291703631702837,0.012671228801091745,0.008020781513322696,0.003824038292439508,0.000995567718524096,-0.000252182117595943,-0.000263867482074276,0.000353056290897718,0.001023718549879908,0.001394469069796279,0.001377552373787447,0.001080605783388492,0.000686212071331413,0.000346610446248922,0.000131756987082392,0.000033840379282726,5.495187851186830E-6,1.184916684512400E-6,}; -static const float32_t FIR_HILB_I_coeffs[IQ_HILBERT_TAPS] = {1.184916684511330E-6,5.495187851192830E-6,0.000033840379282765,0.000131756987082493,0.000346610446249087,0.000686212071331583,0.001080605783388535,0.001377552373787196,0.001394469069795626,0.001023718549878922,0.000353056290896726,-0.000263867482074702,-0.000252182117595157,0.000995567718526529,0.003824038292443482,0.008020781513327347,0.012671228801095511,0.016291703631703871,0.017281600304893549,0.014602504124454760,0.008462390387394530,0.000716546420931058,-0.005262344892040617,-0.005338445681782295,0.004140778180062659,0.024955620998331700,0.055953014535124364,0.092744251946678791,0.128386567929371614,0.154958903256806030,0.165625340599038717,0.156577648180865114,0.128243450679993098,0.085352373172894513,0.035805263058504240,-0.011328593299906053,-0.048086624492370562,-0.069486353007591969,-0.074471271884586368,-0.065717656838996275,-0.048456557469197976,-0.028755507153804018,-0.011826169645826008,-0.000850063052109614,0.003411293934928160,0.002239659354787342,-0.001926794263410410,-0.006516625440889521,-0.009637173648367584,-0.010466629248143317,-0.009200409429964055,-0.006681314536909944,-0.003920158431248482,-0.001700621211114497,-0.000382670153832524,0.000082954298431821,-2.421702968013570E-6,-0.000282830558177374,-0.000497504547389206,-0.000540377608401341,-0.000435993654001571,-0.000270915868650005,-0.000125961068157200,-0.000039219921881752,-5.702029823285370E-6}; - -static const IIR_BIQUAD_FILTER IIR_Biquad_Filters[IIR_FILTERS_COUNT] = (const IIR_BIQUAD_FILTER[]){ - //IIR RX/TX IIR Highpass Fs=48000 Apass=1 Astop=120 // coefficients converted to Direct-Form II Transposed by MATLAB // https://ua3reo.ru/services/matlab_to_arm_biquad.php - { - .width = 60, - .type = IIR_BIQUAD_HPF, - .stages = 15, - .coeffs = (float32_t[]){0.9998945186242, 0, 0, 0, 0, 1, -2, 1, 1.999758132887, -0.99981994161, 0.9996889367649, 0, 0, 0, 0, 1, -2, 1, 1.999343665899, -0.9994120811608, 0.9993922022251, 0, 0, 0, 0, 1, -2, 1, 1.99874202768, -0.9988267812205, 0.9988594148129, 0, 0, 0, 0, 1, -2, 1, 1.997658474509, -0.9977791847428, 0.9976379235525, 0, 0, 0, 0, 1, -2, 1, 1.995171008271, -0.9953806859393, 0.993575273017, 0, 0, 0, 0, 1, -2, 1, 1.9868941568, -0.9874069352679, 0.9658298859242, 0, 0, 0, 0, 1, -2, 1, 1.930363237657, -0.9329563060393, 0.8912509381337, 0, 0, 0, 0}, - }, - { - .width = 100, - .type = IIR_BIQUAD_HPF, - .stages = 15, - .coeffs = (float32_t[]){0.9998070433437, 0, 0, 0, 0, 1, -2, 1, 1.99952824718, -0.9996999261949, 0.9994626733323, 0, 0, 0, 0, 1, -2, 1, 1.998830345237, -0.9990203480919, 0.998963895279, 0, 0, 0, 0, 1, -2, 1, 1.997810125605, -0.9980454555113, 0.9980670102991, 0, 0, 0, 0, 1, -2, 1, 1.995966497435, -0.9963015437617, 0.9960114376034, 0, 0, 0, 0, 1, -2, 1, 1.991732125694, -0.99231362472, 0.9891973898471, 0, 0, 0, 0, 1, -2, 1, 1.977685712474, -0.9791038469146, 0.9436531717078, 0, 0, 0, 0, 1, -2, 1, 1.883787490005, -0.8908251968259, 0.8912509381337, 0, 0, 0, 0}, - }, - { - .width = 200, - .type = IIR_BIQUAD_HPF, - .stages = 15, - .coeffs = (float32_t[]){0.9995283511221, 0, 0, 0, 0, 1, -2, 1, 1.998713410513, -0.9993999939754, 0.9988310262326, 0, 0, 0, 0, 1, -2, 1, 1.997282254376, -0.9980418505545, 0.9978125457543, 0, 0, 0, 0, 1, -2, 1, 1.995154933871, -0.9960952491464, 0.9959747660947, 0, 0, 0, 0, 1, -2, 1, 1.991280786954, -0.9926182774253, 0.9917669813622, 0, 0, 0, 0, 1, -2, 1, 1.98237582151, -0.9846921039384, 0.9779386809936, 0, 0, 0, 0, 1, -2, 1, 1.953073134305, -0.9586815896694, 0.8903472269478, 0, 0, 0, 0, 1, -2, 1, 1.767413007236, -0.7939759005556, 0.8912509381337, 0, 0, 0, 0}, - }, - { - .width = 300, - .type = IIR_BIQUAD_HPF, - .stages = 15, - .coeffs = (float32_t[]){0.9991640098344, 0, 0, 0, 0, 1, -2, 1, 1.997555784552, -0.9991002547852, 0.998105326748, 0, 0, 0, 0, 1, -2, 1, 1.995356606708, -0.9970647002838, 0.9965466117696, 0, 0, 0, 0, 1, -2, 1, 1.992036560075, -0.9941498870033, 0.9937250727065, 0, 0, 0, 0, 1, -2, 1, 1.985948652965, -0.9889516378612, 0.9872730937592, 0, 0, 0, 0, 1, -2, 1, 1.971951806778, -0.9771405682585, 0.9662614994334, 0, 0, 0, 0, 1, -2, 1, 1.926287935636, -0.9387580620975, 0.8400927948412, 0, 0, 0, 0, 1, -2, 1, 1.651985027197, -0.7083861521682, 0.8912509381337, 0, 0, 0, 0}, - }, - { - .width = 400, - .type = IIR_BIQUAD_HPF, - .stages = 15, - .coeffs = (float32_t[]){0.9987141206486, 0, 0, 0, 0, 1, -2, 1, 1.996055722606, -0.9988007599883, 0.997285863546, 0, 0, 0, 0, 1, -2, 1, 1.993054364875, -0.9960890893095, 0.9951667918349, 0, 0, 0, 0, 1, -2, 1, 1.988457296701, -0.9922098706388, 0.9913198227663, 0, 0, 0, 0, 1, -2, 1, 1.979976254042, -0.9853030370226, 0.982536466246, 0, 0, 0, 0, 1, -2, 1, 1.960481910207, -0.9696639547771, 0.9542033020911, 0, 0, 0, 0, 1, -2, 1, 1.897458185064, -0.9193550233007, 0.7928443133024, 0, 0, 0, 0, 1, -2, 1, 1.538364485671, -0.6330127675387, 0.8912509381337, 0, 0, 0, 0}, - }, - { - .width = 500, - .type = IIR_BIQUAD_HPF, - .stages = 15, - .coeffs = (float32_t[]){0.9981787993571, 0, 0, 0, 0, 1, -2, 1, 1.994213636568, -0.9985015608603, 0.9963729457258, 0, 0, 0, 0, 1, -2, 1, 1.990376574159, -0.9951152087441, 0.9936738219286, 0, 0, 0, 0, 1, -2, 1, 1.98441959088, -0.9902756968342, 0.9887609930392, 0, 0, 0, 0, 1, -2, 1, 1.973370111394, -0.9816738607631, 0.9775639982538, 0, 0, 0, 0, 1, -2, 1, 1.947988992653, -0.9622670003627, 0.9418011512827, 0, 0, 0, 0, 1, -2, 1, 1.866713400754, -0.9004912043762, 0.748515491982, 0, 0, 0, 0, 1, -2, 1, 1.427203352458, -0.5668586154696, 0.8912509381337, 0, 0, 0, 0}, - }, - //used for the FM noise squelch - { - .width = 15000, - .type = IIR_BIQUAD_HPF, - .stages = 15, - .coeffs = (float32_t[]){0.3049851455408, 0, 0, 0, 0, 1, -2, 1, -0.7591287465444, -0.9790693287075, 0.2780078711753, 0, 0, 0, 0, 1, -2, 1, -0.8256589275237, -0.9376904122248, 0.2323960275367, 0, 0, 0, 0, 1, -2, 1, -0.9664437350711, -0.8960278452179, 0.1720665990118, 0, 0, 0, 0, 1, -2, 1, -1.165936151782, -0.8542025478295, 0.1051104068231, 0, 0, 0, 0, 1, -2, 1, -1.394079028152, -0.8145206554444, 0.04513708899945, 0, 0, 0, 0, 1, -2, 1, -1.601425033622, -0.78197338962, 0.008951452064989, 0, 0, 0, 0, 1, -2, 1, -1.727386349532, -0.7631921577923, 0.8912509381337, 0, 0, 0, 0}, - }, - { - .width = 20000, - .type = IIR_BIQUAD_HPF, - .stages = 15, - .coeffs = (float32_t[]){0.0664759669061, 0, 0, 0, 0, 1, -2, 1, -1.722719616758, -0.9886234843822, 0.05976585969453, 0, 0, 0, 0, 1, -2, 1, -1.727533129144, -0.9665965679221, 0.04829462608705, 0, 0, 0, 0, 1, -2, 1, -1.752941532896, -0.9461200372446, 0.03407949397928, 0, 0, 0, 0, 1, -2, 1, -1.791673048598, -0.9279910245151, 0.0197409684492, 0, 0, 0, 0, 1, -2, 1, -1.834168405903, -0.9131322796994, 0.00809367952317, 0, 0, 0, 0, 1, -2, 1, -1.870134827536, -0.9025095456287, 0.001562021017125, 0, 0, 0, 0, 1, -2, 1, -1.890706281461, -0.8969543655294, 0.8912509381337, 0, 0, 0, 0}, - }, - //IIR RX/TX IIR Lowpass Fs=48000 Apass=1 Astop=120 // coefficients converted to Direct-Form II Transposed by MATLAB // https://ua3reo.ru/services/matlab_to_arm_biquad.php - { - .width = 100, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.7208249334091,0,0,0,0,1,-1.999778997495,1,1.999439781257,-0.9996040129205,0.7429805216488,0,0,0,0,1,-1.999754828728,1,1.999056772806,-0.9992054066203,0.6060753731942,0,0,0,0,1,-1.99969848302,1,1.998483224057,-0.9986051015077,0.4040649675117,0,0,0,0,1,-1.999550310328,1,1.997690564915,-0.9977738396473,0.1851242413914,0,0,0,0,1,-1.998994965209,1,1.996804854186,-0.9968443765289,0.03938043700753,0,0,0,0,1,-1.992011689511,1,1.996176352021,-0.9961846783158,0.00104216721092,0,0,0,0,1,-1.999788340031,1,1.999709903108,-0.9998811122444,1,0,0,0,0}, - }, - { - .width = 100, //gauss Q30 - .type = IIR_BIQUAD_LPF_GAUSS, - .stages = 3, - .coeffs = (float32_t[]){0.0002143270359125,0,0,0,0,1,0,-1,1.999528518437,-0.9995713459282,1,0,0,0,0}, - }, - { - .width = 150, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.7207663679481,0,0,0,0,1,-1.999502760955,1,1.999036619167,-0.9994060980585,0.7428553682145,0,0,0,0,1,-1.99944838721,1,1.998474024666,-0.9988083807338,0.6058981026978,0,0,0,0,1,-1.9993216265,1,1.997634295991,-0.9979084240038,0.4038864514181,0,0,0,0,1,-1.998988304298,1,1.996475378457,-0.996662644194,0.185034119949,0,0,0,0,1,-1.997739301064,1,1.99518141299,-0.9952702702351,0.03944102586584,0,0,0,0,1,-1.982070421081,1,1.994263667199,-0.9942823841278,0.001042149410275,0,0,0,0,1,-1.99952377957,1,1.999436477776,-0.999821680025,1,0,0,0,0}, - }, - { - .width = 150, //gauss Q30 - .type = IIR_BIQUAD_LPF_GAUSS, - .stages = 3, - .coeffs = (float32_t[]){0.0003214561070949,0,0,0,0,1,0,-1,1.999260736687,-0.9993570877858,1,0,0,0,0}, - }, - { - .width = 200, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.72071293336,0,0,0,0,1,-1.999116060767,1,1.998551474236,-0.9992082462229,0.74273923566,0,0,0,0,1,-1.999019411215,1,1.997817269575,-0.9984115533916,0.6057345646873,0,0,0,0,1,-1.998794101473,1,1.996725115572,-0.9972122828077,0.4037266243069,0,0,0,0,1,-1.998201693769,1,1.995219980663,-0.995552716956,0.1849664489646,0,0,0,0,1,-1.995982544993,1,1.993540763584,-0.9936986127449,0.03954071763951,0,0,0,0,1,-1.968234357343,1,1.992350363641,-0.992383608041,0.00104213688186,0,0,0,0,1,-1.999153421989,1,1.99907749239,-0.999762258967,1,0,0,0,0}, - }, - { - .width = 200, //gauss Q30 - .type = IIR_BIQUAD_LPF_GAUSS, - .stages = 3, - .coeffs = (float32_t[]){0.0004285622244523,0,0,0,0,1,0,-1,1.998971604131,-0.9991428755511,1,0,0,0,0}, - }, - { - .width = 250, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.720664630314,0,0,0,0,1,-1.998618927893,1,1.997984389508,-0.999010465336,0.7426321228591,0,0,0,0,1,-1.998467942861,1,1.997086571898,-0.9980149380731,0.6055847496559,0,0,0,0,1,-1.998115982012,1,1.995755763839,-0.9965166942234,0.4035854587266,0,0,0,0,1,-1.99719067651,1,1.993924446042,-0.9944440666845,0.1849211788432,0,0,0,0,1,-1.993725868381,1,1.991882932514,-0.9921293880475,0.03967941092905,0,0,0,0,1,-1.950583777507,1,1.99043640762,-0.9904883056732,0.001042129625741,0,0,0,0,1,-1.998677294347,1,1.998632969917,-0.9997028516111,1,0,0,0,0}, - }, - { - .width = 250, //gauss Q30 - .type = IIR_BIQUAD_LPF_GAUSS, - .stages = 3, - .coeffs = (float32_t[]){0.0005356453959978,0,0,0,0,1,0,-1,1.998661128432,-0.998928709208,1,0,0,0,0}, - }, - { - .width = 300, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.7206214592866,0,0,0,0,1,-1.998011402133,1,1.997335411073,-0.9988127633125,0.7425340284537,0,0,0,0,1,-1.997794036286,1,1.996281997835,-0.9976185482359,0.6054486480294,0,0,0,0,1,-1.997287363311,1,1.994726322031,-0.9958216745118,0.4034629277141,0,0,0,0,1,-1.995955506583,1,1.992588847953,-0.9933367020948,0.1848982613918,0,0,0,0,1,-1.990970773959,1,1.990207945175,-0.9905625802184,0.03985700780755,0,0,0,0,1,-1.929219894403,1,1.988521765331,-0.9885964329325,0.00104212764176,0,0,0,0,1,-1.998095431429,1,1.998102936976,-0.999643460497,1,0,0,0,0}, - }, - { - .width = 300, //gauss Q30 - .type = IIR_BIQUAD_LPF_GAUSS, - .stages = 3, - .coeffs = (float32_t[]){0.0006427056297418,0,0,0,0,1,0,-1,1.99832931748,-0.9987145887405,1,0,0,0,0}, - }, - { - .width = 350, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.7205834205616,0,0,0,0,1,-1.997293532117,1,1.99660458806,-0.99861514806,0.7424449508537,0,0,0,0,1,-1.996997757633,1,1.99540361542,-0.9972223973154,0.6053262501675,0,0,0,0,1,-1.996308361653,1,1.993636871581,-0.9951272398908,0.4033590047953,0,0,0,0,1,-1.994496494189,1,1.991213258601,-0.992230631867,0.1848976498142,0,0,0,0,1,-1.987719093305,1,1.988515825824,-0.9889981734199,0.04007341379976,0,0,0,0,1,-1.90426342632,1,1.986606402888,-0.9867079460128,0.001042130929534,0,0,0,0,1,-1.997407875739,1,1.99748742383,-0.9995840881632,1,0,0,0,0}, - }, - { - .width = 350, //gauss Q30 - .type = IIR_BIQUAD_LPF_GAUSS, - .stages = 3, - .coeffs = (float32_t[]){0.0007497429336899,0,0,0,0,1,0,-1,1.997976179388,-0.9985005141326,1,0,0,0,0}, - }, - { - .width = 400, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.7205505142308,0,0,0,0,1,-1.996465375298,1,1.995791972632,-0.9984176274778,0.7423648882386,0,0,0,0,1,-1.996079185037,1,1.994451494511,-0.9968264987251,0.6052175463649,0,0,0,0,1,-1.995179114375,1,1.992487494118,-0.9944334065369,0.4032736639842,0,0,0,0,1,-1.992814005477,1,1.989797749049,-0.9911258646493,0.1849192987046,0,0,0,0,1,-1.98397298382,1,1.986806597581,-0.9874361519016,0.04032853786182,0,0,0,0,1,-1.875852930095,1,1.984690286325,-0.98482280139,0.001042139488453,0,0,0,0,1,-1.996614677492,1,1.996786464388,-0.999524737147,1,0,0,0,0}, - }, - { - .width = 400, //gauss Q30 - .type = IIR_BIQUAD_LPF_GAUSS, - .stages = 3, - .coeffs = (float32_t[]){0.0008567573158444,0,0,0,0,1,0,-1,1.997601722498,-0.9982864853683,1,0,0,0,0}, - }, - { - .width = 450, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.720522740194,0,0,0,0,1,-1.995526997943,1,1.994897619985,-0.9982202094577,0.7422938385575,0,0,0,0,1,-1.995038408611,1,1.993425706782,-0.9964308658566,0.6051225268525,0,0,0,0,1,-1.993899779815,1,1.991278271456,-0.9937401905854,0.4032068797833,0,0,0,0,1,-1.990908462318,1,1.988342389214,-0.9900224090586,0.1849631640421,0,0,0,0,1,-1.979734925169,1,1.985080282437,-0.9858765000009,0.04062229236161,0,0,0,0,1,-1.844142937358,1,1.982773381593,-0.9829409558176,0.001042153317685,0,0,0,0,1,-1.995715894613,1,1.9960000962,-0.9994654099842,1,0,0,0,0}, - }, - { - .width = 450, //gauss Q30 - .type = IIR_BIQUAD_LPF_GAUSS, - .stages = 3, - .coeffs = (float32_t[]){0.0009637487842045,0,0,0,0,1,0,-1,1.997205955375,-0.9980725024316,1,0,0,0,0}, - }, - { - .width = 500, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.7205000981589,0,0,0,0,1,-1.994478475121,1,1.993921588337,-0.9980229018828,0.7422317995304,0,0,0,0,1,-1.99387553042,1,1.992326325722,-0.9960355120791,0.605041181799,0,0,0,0,1,-1.992470537271,1,1.990009285596,-0.9930476081313,0.4031586271833,0,0,0,0,1,-1.988780342047,1,1.986847247871,-0.9889202736833,0.1850292031848,0,0,0,0,1,-1.975007715206,1,1.983336901258,-0.9843192021433,0.04095459305977,0,0,0,0,1,-1.80930193913,1,1.980855654558,-0.9810623663232,0.001042172416172,0,0,0,0,1,-1.994711592723,1,1.995128360456,-0.9994061092093,1,0,0,0,0}, - }, - { - .width = 500, //gauss Q30 - .type = IIR_BIQUAD_LPF_GAUSS, - .stages = 3, - .coeffs = (float32_t[]){0.001070717346765,0,0,0,0,1,0,-1,1.99678888681,-0.9978585653065,1,0,0,0,0}, - }, - { - .width = 550, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.720482587642,0,0,0,0,1,-1.993319890691,1,1.992863938922,-0.9978257126279,0.7421787686485,0,0,0,0,1,-1.992590664465,1,1.991153426622,-0.9956404507398,0.6049735013114,0,0,0,0,1,-1.99089158693,1,1.988680618721,-0.9923556752304,0.4031288816626,0,0,0,0,1,-1.986430177167,1,1.985312392662,-0.987819467085,0.1851173748647,0,0,0,0,1,-1.969794465394,1,1.981576473791,-0.9827642428434,0.04132535909133,0,0,0,0,1,-1.771510265592,1,1.978937070998,-0.979186990204,0.001042196782629,0,0,0,0,1,-1.993601845129,1,1.994171301981,-0.9993468373552,1,0,0,0,0}, - }, - { - .width = 550, //gauss Q30 - .type = IIR_BIQUAD_LPF_GAUSS, - .stages = 3, - .coeffs = (float32_t[]){0.001177663011516,0,0,0,0,1,0,-1,1.99635052582,-0.997644673977,1,0,0,0,0}, - }, - { - .width = 600, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.7204702079685,0,0,0,0,1,-1.992051337287,1,1.991724735993,-0.9976286495591,0.7421347431752,0,0,0,0,1,-1.991183936653,1,1.989907086576,-0.9952456951636,0.604919475437,0,0,0,0,1,-1.98916314981,1,1.987292353191,-0.9916644078999,0.4031176191874,0,0,0,0,1,-1.983858555024,1,1.983737890091,-0.9867199977999,0.1852276391821,0,0,0,0,1,-1.964098595732,1,1.979799018669,-0.9812116067047,0.04173451294799,0,0,0,0,1,-1.730957907744,1,1.977017596602,-0.9773147850232,0.00104222641555,0,0,0,0,1,-1.992386732821,1,1.993128969233,-0.999287596953,1,0,0,0,0}, - }, - { - .width = 600, //gauss Q30 - .type = IIR_BIQUAD_LPF_GAUSS, - .stages = 3, - .coeffs = (float32_t[]){0.001284585786447,0,0,0,0,1,0,-1,1.995890881647,-0.9974308284271,1,0,0,0,0}, - }, - { - .width = 650, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.7204629582723,0,0,0,0,1,-1.990672916305,1,1.990504046804,-0.9974317205332,0.7420997201468,0,0,0,0,1,-1.989655484775,1,1.988587384469,-0.9948512586532,0.6048790941635,0,0,0,0,1,-1.987285467683,1,1.985844571543,-0.9909738221192,0.4031248162113,0,0,0,0,1,-1.98106611745,1,1.982123805535,-0.9856218743413,0.1853599576003,0,0,0,0,1,-1.957923829211,1,1.978004553417,-0.9796612784204,0.04218198046103,0,0,0,0,1,-1.687842326134,1,1.975097196968,-0.975445708606,0.001042261313204,0,0,0,0,1,-1.991066344448,1,1.992001414299,-0.9992283905322,1,0,0,0,0}, - }, - { - .width = 650, //gauss Q30 - .type = IIR_BIQUAD_LPF_GAUSS, - .stages = 3, - .coeffs = (float32_t[]){0.001391485679541,0,0,0,0,1,0,-1,1.995409963756,-0.9972170286409,1,0,0,0,0}, - }, - { - .width = 700, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.7204608374967,0,0,0,0,1,-1.989184737884,1,1.989201941615,-0.997234933398,0.7420736963727,0,0,0,0,1,-1.988005458472,1,1.987194400975,-0.9944571544889,0.6048523474207,0,0,0,0,1,-1.985258802999,1,1.984337356487,-0.9902839338306,0.403150449675,0,0,0,0,1,-1.978053560366,1,1.980470203241,-0.9845251052012,0.1855142929409,0,0,0,0,1,-1.951274185804,1,1.976193094456,-0.9781132427738,0.04266769078477,0,0,0,0,1,-1.642366288879,1,1.9731758376,-0.9735797190357,0.001042301473633,0,0,0,0,1,-1.989640776319,1,1.990788692891,-0.9991692206202,1,0,0,0,0}, - }, - { - .width = 700, //gauss Q30 - .type = IIR_BIQUAD_LPF_GAUSS, - .stages = 3, - .coeffs = (float32_t[]){0.001498362698778,0,0,0,0,1,0,-1,1.99490778184,-0.9970032746024,1,0,0,0,0}, - }, - { - .width = 750, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.7204638443945,0,0,0,0,1,-1.987586920891,1,1.987818493681,-0.9970382959918,0.7420566684368,0,0,0,0,1,-1.986234019206,1,1.985728218548,-0.9940633959286,0.6048392250815,0,0,0,0,1,-1.983083438794,1,1.982770790904,-0.9895947589406,0.4031944970061,0,0,0,0,1,-1.974821633363,1,1.978777146333,-0.9834296988519,0.1856906093788,0,0,0,0,1,-1.944153976023,1,1.974364657107,-0.976567484639,0.04319157638077,0,0,0,0,1,-1.594735777206,1,1.971253483906,-0.9717167746503,0.001042346894657,0,0,0,0,1,-1.988110132376,1,1.989490864345,-0.9991100897426,1,0,0,0,0}, - }, - { - .width = 750, //gauss Q30 - .type = IIR_BIQUAD_LPF_GAUSS, - .stages = 3, - .coeffs = (float32_t[]){0.001605216852135,0,0,0,0,1,0,-1,1.994384345814,-0.9967895662957,1,0,0,0,0}, - }, - { - .width = 800, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.720471977528,0,0,0,0,1,-1.985879592896,1,1.986353779246,-0.9968418161432,0.7420486326976,0,0,0,0,1,-1.984341340221,1,1.984188921422,-0.9936699962079,0.6048397169624,0,0,0,0,1,-1.980759678604,1,1.981144957841,-0.9889063133199,0.4032569361186,0,0,0,0,1,-1.971371139242,1,1.977044696816,-0.9823356637484,0.1858888724372,0,0,0,0,1,-1.93656779404,1,1.972519255598,-0.9750239889809,0.0437535730025,0,0,0,0,1,-1.545157991834,1,1.969330101199,-0.9698568340382,0.001042397573873,0,0,0,0,1,-1.986474524189,1,1.988107991613,-0.9990510004227,1,0,0,0,0}, - }, - { - .width = 800, //gauss Q30 - .type = IIR_BIQUAD_LPF_GAUSS, - .stages = 3, - .coeffs = (float32_t[]){0.001712048147584,0,0,0,0,1,0,-1,1.993839665819,-0.9965759037048,1,0,0,0,0}, - }, - { - .width = 850, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.7204852352697,0,0,0,0,1,-1.984062890156,1,1.98480787754,-0.9966455016707,0.7420495852893,0,0,0,0,1,-1.98232760651,1,1.982576595597,-0.9932769685399,0.6048538128248,0,0,0,0,1,-1.97828784636,1,1.979459940513,-0.9882186128049,0.4033377454126,0,0,0,0,1,-1.967702933531,1,1.975272915576,-0.9812430083297,0.1861090489832,0,0,0,0,1,-1.928520510423,1,1.970656903068,-0.9734827408562,0.0443536196807,0,0,0,0,1,-1.493839488122,1,1.967405654688,-0.9679998560349,0.001042453508653,0,0,0,0,1,-1.984734070936,1,1.986640141262,-0.9989919551816,1,0,0,0,0}, - }, - { - .width = 850, //gauss Q30 - .type = IIR_BIQUAD_LPF_GAUSS, - .stages = 3, - .coeffs = (float32_t[]){0.001818856593095,0,0,0,0,1,0,-1,1.993273752219,-0.9963622868138,1,0,0,0,0}, - }, - { - .width = 900, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.7205036158022,0,0,0,0,1,-1.98213695759,1,1.983180870771,-0.9964493603827,0.7420595221218,0,0,0,0,1,-1.980193014772,1,1.980891328841,-0.9928843261151,0.6048815023758,0,0,0,0,1,-1.975668286282,1,1.977715822298,-0.9875316731982,0.403436903774,0,0,0,0,1,-1.963817923963,1,1.973461862386,-0.9801517410209,0.1863511072234,0,0,0,0,1,-1.920017264481,1,1.968777611568,-0.9719437254133,0.0449916587093,0,0,0,0,1,-1.440984462172,1,1.965480109483,-0.9661457997193,0.001042514696144,0,0,0,0,1,-1.982888899384,1,1.985087383472,-0.9989329565383,1,0,0,0,0}, - }, - { - .width = 900, //gauss Q30 - .type = IIR_BIQUAD_LPF_GAUSS, - .stages = 3, - .coeffs = (float32_t[]){0.001925642196633,0,0,0,0,1,0,-1,1.992686615605,-0.9961487156067,1,0,0,0,0}, - }, - { - .width = 950, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.7205271171187,0,0,0,0,1,-1.980101948756,1,1.981472844121,-0.9962534000772,0.7420784388822,0,0,0,0,1,-1.977937773369,1,1.979133210681,-0.9924920821014,0.6049227752688,0,0,0,0,1,-1.972901362771,1,1.975912686735,-0.9868455102693,0.403554390574,0,0,0,0,1,-1.959717069935,1,1.971611595912,-0.979061870235,0.1866150166993,0,0,0,0,1,-1.911063456245,1,1.966881392071,-0.9704069278933,0.04566763563196,0,0,0,0,1,-1.386793204296,1,1.96355343059,-0.96429462441,0.001042581133273,0,0,0,0,1,-1.980939143872,1,1.983449792026,-0.9988740070091,1,0,0,0,0}, - }, - { - .width = 950, //gauss Q30 - .type = IIR_BIQUAD_LPF_GAUSS, - .stages = 3, - .coeffs = (float32_t[]){0.00203240496616,0,0,0,0,1,0,-1,1.992078266787,-0.9959351900677,1,0,0,0,0}, - }, - { - .width = 1000, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.7205557370232,0,0,0,0,1,-1.977958025827,1,1.979683885735,-0.9960576285415,0.7421063310346,0,0,0,0,1,-1.975562102286,1,1.977302332398,-0.9921002496442,0.6049776211049,0,0,0,0,1,-1.969987460285,1,1.974050617525,-0.9861601397558,0.4036901856686,0,0,0,0,1,-1.955401381923,1,1.96972217371,-0.9779734043745,0.1869007482833,0,0,0,0,1,-1.90166473813,1,1.964968254472,-0.9688723336301,0.04638149922917,0,0,0,0,1,-1.331460730689,1,1.961625582906,-0.9624462896615,0.001042652816742,0,0,0,0,1,-1.978884946296,1,1.981727444308,-0.998815109108,1,0,0,0,0}, - }, - { - .width = 1000, //gauss Q30 - .type = IIR_BIQUAD_LPF_GAUSS, - .stages = 3, - .coeffs = (float32_t[]){0.002139144909634,0,0,0,0,1,0,-1,1.991448716805,-0.9957217101807,1,0,0,0,0}, - }, - { - .width = 1400, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.008337759067718, 0, 0, 0, 0, 1, 2, 1, 1.962488019523, -0.9958390557937, 0.007506676076303, 0, 0, 0, 0, 1, 2, 1, 1.957738871263, -0.9877655755683, 0.006043957858058, 0, 0, 0, 0, 1, 2, 1, 1.956161255776, -0.9803370872084, 0.004235277493261, 0, 0, 0, 0, 1, 2, 1, 1.956962928023, -0.9739040379958, 0.002433354390642, 0, 0, 0, 0, 1, 2, 1, 1.959042241511, -0.9687756590733, 0.0009906129953076, 0, 0, 0, 0, 1, 2, 1, 1.961242450501, -0.9652049024823, 0.00019040061388, 0, 0, 0, 0, 1, 2, 1, 1.962610750926, -0.9633723533813, 0.8912509381337, 0, 0, 0, 0}, - }, - { - .width = 1600, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.01087767183753, 0, 0, 0, 0, 1, 2, 1, 1.951743475923, -0.9952541632731, 0.009790251369373, 0, 0, 0, 0, 1, 2, 1, 1.946889322437, -0.9860503279146, 0.007881911933017, 0, 0, 0, 0, 1, 2, 1, 1.946054588275, -0.9775822360066, 0.005523739386766, 0, 0, 0, 0, 1, 2, 1, 1.948150114001, -0.9702450715483, 0.003174223932421, 0, 0, 0, 0, 1, 2, 1, 1.951694105105, -0.9643910008345, 0.001292461661961, 0, 0, 0, 0, 1, 2, 1, 1.955141533597, -0.9603113802446, 0.0002484458717897, 0, 0, 0, 0, 1, 2, 1, 1.957222530892, -0.9582163143789, 0.8912509381337, 0, 0, 0, 0}, - }, - { - .width = 1800, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.01374975760108, 0, 0, 0, 0, 1, 2, 1, 1.939673816033, -0.9946728464377, 0.01237165909396, 0, 0, 0, 0, 1, 2, 1, 1.934859504021, -0.9843461403965, 0.00995992424776, 0, 0, 0, 0, 1, 2, 1, 1.935004390016, -0.9748440870071, 0.006981215584571, 0, 0, 0, 0, 1, 2, 1, 1.938680240252, -0.96660510259, 0.004012807567963, 0, 0, 0, 0, 1, 2, 1, 1.943973272573, -0.960024502845, 0.001634314057146, 0, 0, 0, 0, 1, 2, 1, 1.948896382515, -0.9554336387438, 0.0003142054006989, 0, 0, 0, 0, 1, 2, 1, 1.951817350883, -0.9530741724857, 0.8912509381337, 0, 0, 0, 0}, - }, - { - .width = 2100, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.0186757712085, 0, 0, 0, 0, 1, 2, 1, 1.919105345061, -0.9938084298953, 0.01679782577699, 0, 0, 0, 0, 1, 2, 1, 1.914621379821, -0.9818126829289, 0.01352433909839, 0, 0, 0, 0, 1, 2, 1, 1.916673090488, -0.9707704468821, 0.009483344041549, 0, 0, 0, 0, 1, 2, 1, 1.923248669381, -0.9611820455475, 0.005453911681508, 0, 0, 0, 0, 1, 2, 1, 1.931692622294, -0.9535082690199, 0.002222306584324, 0, 0, 0, 0, 1, 2, 1, 1.939254929475, -0.948144155812, 0.0004273708029279, 0, 0, 0, 0, 1, 2, 1, 1.943673846642, -0.9453833298533, 0.8912509381337, 0, 0, 0, 0}, - }, - { - .width = 2300, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.02236805492097, 0, 0, 0, 0, 1, 2, 1, 1.903765535654, -0.9932377553382, 0.02011484257157, 0, 0, 0, 0, 1, 2, 1, 1.899680932944, -0.9801403032298, 0.01619704186404, 0, 0, 0, 0, 1, 2, 1, 1.903290409888, -0.9680785773444, 0.01136147999554, 0, 0, 0, 0, 1, 2, 1, 1.91214621026, -0.9575921302427, 0.006536937451987, 0, 0, 0, 0, 1, 2, 1, 1.92303837058, -0.9491861203884, 0.002664657794376, 0, 0, 0, 0, 1, 2, 1, 1.932642344124, -0.9433009753017, 0.0005125568415544, 0, 0, 0, 0, 1, 2, 1, 1.938218356086, -0.9402685834517, 0.8912509381337, 0, 0, 0, 0}, - }, - { - .width = 2500, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.02638375826711, 0, 0, 0, 0, 1, 2, 1, 1.887136976642, -0.9926720097103, 0.023722179526, 0, 0, 0, 0, 1, 2, 1, 1.883593567933, -0.9784822860373, 0.01910539136227, 0, 0, 0, 0, 1, 2, 1, 1.888985449532, -0.9654070149807, 0.0134072873595, 0, 0, 0, 0, 1, 2, 1, 1.900394125441, -0.9540232748791, 0.007718006483406, 0, 0, 0, 0, 1, 2, 1, 1.914009303952, -0.9448813298853, 0.003147525588083, 0, 0, 0, 0, 1, 2, 1, 1.925879604901, -0.9384697072535, 0.0006055973457388, 0, 0, 0, 0, 1, 2, 1, 1.932739506253, -0.9351618956361, 0.8912509381337, 0, 0, 0, 0}, - }, - { - .width = 2700, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.03071990044993, 0, 0, 0, 0, 1, 2, 1, 1.869231969467, -0.9921115712663, 0.02761740656234, 0, 0, 0, 0, 1, 2, 1, 1.866369928111, -0.9768395543603, 0.02224808606729, 0, 0, 0, 0, 1, 2, 1, 1.873764434848, -0.9627567791176, 0.01562051628912, 0, 0, 0, 0, 1, 2, 1, 1.887994019063, -0.9504760842192, 0.008997387142466, 0, 0, 0, 0, 1, 2, 1, 1.904604155312, -0.9405937038814, 0.003671160986692, 0, 0, 0, 0, 1, 2, 1, 1.918964639434, -0.9336492833803, 0.0007065561783843, 0, 0, 0, 0, 1, 2, 1, 1.927235402943, -0.9300616276564, 0.8912509381337, 0, 0, 0, 0}, - }, - { - .width = 2900, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.03537329213245, 0, 0, 0, 0, 1, 2, 1, 1.850063645572, -0.9915568141019, 0.03179797016664, 0, 0, 0, 0, 1, 2, 1, 1.848021141171, -0.9752130218375, 0.02562380547135, 0, 0, 0, 0, 1, 2, 1, 1.857633663767, -0.9601288856525, 0.01800097496312, 0, 0, 0, 0, 1, 2, 1, 1.874947272759, -0.9469511726113, 0.01037542521106, 0, 0, 0, 0, 1, 2, 1, 1.894821365712, -0.9363230665567, 0.004235862132326, 0, 0, 0, 0, 1, 2, 1, 1.911895202355, -0.9288386508847, 0.0008155080256104, 0, 0, 0, 0, 1, 2, 1, 1.92170411798, -0.9249661500829, 0.8912509381337, 0, 0, 0, 0}, - }, - { - .width = 3000, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.0378179035225, 0, 0, 0, 0, 1, 2, 1, 1.840010067621, -0.991281681711, 0.03399442178565, 0, 0, 0, 0, 1, 2, 1, 1.838428426034, -0.9744061131769, 0.02739863142844, 0, 0, 0, 0, 1, 2, 1, 1.849229108307, -0.9588236340205, 0.01925387115406, 0, 0, 0, 0, 1, 2, 1, 1.868181781801, -0.9451972664171, 0.01110157002227, 0, 0, 0, 0, 1, 2, 1, 1.889787788767, -0.9341940688557, 0.004533718545948, 0, 0, 0, 0, 1, 2, 1, 1.908301807349, -0.9264366815325, 0.0008730076728553, 0, 0, 0, 0, 1, 2, 1, 1.918927669868, -0.9224197005598, 0.8912509381337, 0, 0, 0, 0}, - }, - { - .width = 3200, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.04294074008438, 0, 0, 0, 0, 1, 2, 1, 1.818973177899, -0.9907361382365, 0.03859793564407, 0, 0, 0, 0, 1, 2, 1, 1.818413829065, -0.9728055716408, 0.03112136875327, 0, 0, 0, 0, 1, 2, 1, 1.831745678148, -0.9562311531615, 0.0218849394564, 0, 0, 0, 0, 1, 2, 1, 1.854167192034, -0.9417069498599, 0.01262841216123, 0, 0, 0, 0, 1, 2, 1, 1.879434978023, -0.9299486266681, 0.005160681770831, 0, 0, 0, 0, 1, 2, 1, 1.900996067857, -0.9216387949399, 0.0009941132114779, 0, 0, 0, 0, 1, 2, 1, 1.913351916063, -0.9173283689091, 0.8912509381337, 0, 0, 0, 0}, - }, - { - .width = 3400, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.04837195881699, 0, 0, 0, 0, 1, 2, 1, 1.796709356328, -0.9901971915964, 0.04347987080713, 0, 0, 0, 0, 1, 2, 1, 1.797303988281, -0.9712234715099, 0.03507374176562, 0, 0, 0, 0, 1, 2, 1, 1.813368576892, -0.9536635439548, 0.02468300567677, 0, 0, 0, 0, 1, 2, 1, 1.839508477053, -0.93824049976, 0.01425511571928, 0, 0, 0, 0, 1, 2, 1, 1.868699356243, -0.9257198191201, 0.005829666089407, 0, 0, 0, 0, 1, 2, 1, 1.893529468422, -0.9168481327797, 0.001123447109388, 0, 0, 0, 0, 1, 2, 1, 1.90774399342, -0.9122377818571, 0.8912509381337, 0, 0, 0, 0}, - }, - { - .width = 3600, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.05410766292916, 0, 0, 0, 0, 1, 2, 1, 1.773234547842, -0.9896651995582, 0.04863725173841, 0, 0, 0, 0, 1, 2, 1, 1.775111685656, -0.9696606926092, 0.03925435731034, 0, 0, 0, 0, 1, 2, 1, 1.794104386414, -0.9511218156552, 0.02764807346692, 0, 0, 0, 0, 1, 2, 1, 1.824206281656, -0.9347985755237, 0.01598229875604, 0, 0, 0, 0, 1, 2, 1, 1.857578346955, -0.9215075419793, 0.006541139568672, 0, 0, 0, 0, 1, 2, 1, 1.885899135105, -0.9120636933801, 0.00126112358591, 0, 0, 0, 0, 1, 2, 1, 1.902101832716, -0.9071463270599, 0.8912509381337, 0, 0, 0, 0}, - }, - { - .width = 3800, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.06014376034101, 0, 0, 0, 0, 1, 2, 1, 1.748565473372, -0.9891405147361, 0.05406698488614, 0, 0, 0, 0, 1, 2, 1, 1.75185016527, -0.9681181048143, 0.04366179904764, 0, 0, 0, 0, 1, 2, 1, 1.773959780893, -0.9486069770836, 0.03078019985087, 0, 0, 0, 0, 1, 2, 1, 1.808261053311, -0.9313818527144, 0.01781065782937, 0, 0, 0, 0, 1, 2, 1, 1.846069082969, -0.9173117142862, 0.007295620714451, 0, 0, 0, 0, 1, 2, 1, 1.878102006143, -0.9072844890005, 0.001407268766049, 0, 0, 0, 0, 1, 2, 1, 1.896423317628, -0.9020523926923, 0.8912509381337, 0, 0, 0, 0}, - }, - { - .width = 4000, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.0664759669061, 0, 0, 0, 0, 1, 2, 1, 1.722719616758, -0.9886234843822, 0.05976585969453, 0, 0, 0, 0, 1, 2, 1, 1.727533129144, -0.9665965679221, 0.04829462608705, 0, 0, 0, 0, 1, 2, 1, 1.752941532896, -0.9461200372446, 0.03407949397928, 0, 0, 0, 0, 1, 2, 1, 1.791673048598, -0.9279910245151, 0.0197409684492, 0, 0, 0, 0, 1, 2, 1, 1.834168405903, -0.9131322796994, 0.00809367952317, 0, 0, 0, 0, 1, 2, 1, 1.870134827536, -0.9025095456287, 0.001562021017125, 0, 0, 0, 0, 1, 2, 1, 1.890706281461, -0.8969543655294, 0.8912509381337, 0, 0, 0, 0}, - }, - { - .width = 4500, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.08357215221717, 0, 0, 0, 0, 1, 2, 1, 1.653078015998, -0.987366624867, 0.07516842731719, 0, 0, 0, 0, 1, 2, 1, 1.662216664048, -0.9628903733163, 0.06085305871942, 0, 0, 0, 0, 1, 2, 1, 1.696619139932, -0.9400313748092, 0.043060258968, 0, 0, 0, 0, 1, 2, 1, 1.747390932282, -0.9196319681538, 0.02501859112256, 0, 0, 0, 0, 1, 2, 1, 1.802680917653, -0.9027552821436, 0.01028369816962, 0, 0, 0, 0, 1, 2, 1, 1.849449766852, -0.8905845595302, 0.001987580597066, 0, 0, 0, 0, 1, 2, 1, 1.876230447368, -0.8841807697568, 0.8912509381337, 0, 0, 0, 0}, - }, - { - .width = 5000, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.1024156725791, 0, 0, 0, 0, 1, 2, 1, 1.576502212425, -0.9861649027415, 0.09217691252119, 0, 0, 0, 0, 1, 2, 1, 1.590626367525, -0.9593340176097, 0.07478718663087, 0, 0, 0, 0, 1, 2, 1, 1.63499047411, -0.9341392206335, 0.0530907744763, 0, 0, 0, 0, 1, 2, 1, 1.699087884799, -0.9114509827042, 0.03095453675841, 0, 0, 0, 0, 1, 2, 1, 1.768662790286, -0.8924809373192, 0.01276135116726, 0, 0, 0, 0, 1, 2, 1, 1.827620197021, -0.8786656016897, 0.002470638805861, 0, 0, 0, 0, 1, 2, 1, 1.861463480239, -0.8713460354626, 0.8912509381337, 0, 0, 0, 0}, - }, - { - .width = 6000, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.1450110967848, 0, 0, 0, 0, 1, 2, 1, 1.403901955866, -0.9839463430048, 0.1307691226309, 0, 0, 0, 0, 1, 2, 1, 1.429644184424, -0.9527206749475, 0.1066810357534, 0, 0, 0, 0, 1, 2, 1, 1.496284169193, -0.9230083122063, 0.07632499046678, 0, 0, 0, 0, 1, 2, 1, 1.590375038731, -0.8956750005979, 0.04487973895608, 0, 0, 0, 0, 1, 2, 1, 1.692728831788, -0.8722477876128, 0.01863599384496, 0, 0, 0, 0, 1, 2, 1, 1.780245937312, -0.8547899126915, 0.003623004541629, 0, 0, 0, 0, 1, 2, 1, 1.830897212635, -0.8453892308013, 0.8912509381337, 0, 0, 0, 0}, - }, - { - .width = 7000, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.1935320872064, 0, 0, 0, 0, 1, 2, 1, 1.207875690811, -0.9820040396369, 0.1750141161592, 0, 0, 0, 0, 1, 2, 1, 1.246795349816, -0.9468518144529, 0.1437565297358, 0, 0, 0, 0, 1, 2, 1, 1.337830681316, -0.9128568002589, 0.1038445422874, 0, 0, 0, 0, 1, 2, 1, 1.465400321994, -0.8807784911441, 0.06170673134055, 0, 0, 0, 0, 1, 2, 1, 1.605636412052, -0.8524633374146, 0.02585632577245, 0, 0, 0, 0, 1, 2, 1, 1.727351325001, -0.8307766280909, 0.005053269625901, 0, 0, 0, 0, 1, 2, 1, 1.798655982283, -0.8188690607867, 0.8912509381337, 0, 0, 0, 0}, - }, - { - .width = 8000, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.2471567962157, 0, 0, 0, 0, 1, 2, 1, 0.9917423657721, -0.9803695506349, 0.224315091642, 0, 0, 0, 0, 1, 2, 1, 1.044554840447, -0.9418152070148, 0.1857606943562, 0, 0, 0, 0, 1, 2, 1, 1.160774872447, -0.9038176498723, 0.1357293808017, 0, 0, 0, 0, 1, 2, 1, 1.323981745373, -0.8668992685794, 0.0816816657689, 0, 0, 0, 0, 1, 2, 1, 1.506461203918, -0.8331878669936, 0.0346084620725, 0, 0, 0, 0, 1, 2, 1, 1.668097114322, -0.8065309626121, 0.006808262659746, 0, 0, 0, 0, 1, 2, 1, 1.764321649588, -0.7915547002269, 0.8912509381337, 0, 0, 0, 0}, - }, - { - .width = 9000, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.3049851455408, 0, 0, 0, 0, 1, 2, 1, 0.7591287465444, -0.9790693287075, 0.2780078711753, 0, 0, 0, 0, 1, 2, 1, 0.8256589275237, -0.9376904122248, 0.2323960275367, 0, 0, 0, 0, 1, 2, 1, 0.9664437350711, -0.8960278452179, 0.1720665990118, 0, 0, 0, 0, 1, 2, 1, 1.165936151782, -0.8542025478295, 0.1051104068231, 0, 0, 0, 0, 1, 2, 1, 1.394079028152, -0.8145206554444, 0.04513708899945, 0, 0, 0, 0, 1, 2, 1, 1.601425033622, -0.78197338962, 0.008951452064989, 0, 0, 0, 0, 1, 2, 1, 1.727386349532, -0.7631921577923, 0.8912509381337, 0, 0, 0, 0}, - }, - { - .width = 10000, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.3660530366546, 0, 0, 0, 0, 1, 2, 1, 0.5139122219498, -0.9781243685681, 0.3353618895079, 0, 0, 0, 0, 1, 2, 1, 0.5931003386238, -0.9345478966556, 0.2833072224337, 0, 0, 0, 0, 1, 2, 1, 0.7563993155832, -0.889628205318, 0.2129361875021, 0, 0, 0, 0, 1, 2, 1, 0.9911412275405, -0.8428859775489, 0.1323619182589, 0, 0, 0, 0, 1, 2, 1, 1.267164478707, -0.7966121517422, 0.0577608794396, 0, 0, 0, 0, 1, 2, 1, 1.526003705736, -0.7570472234945, 0.01156881757925, 0, 0, 0, 0, 1, 2, 1, 1.687220763409, -0.7334960337262, 0.8912509381337, 0, 0, 0, 0}, - }, - { - .width = 15000, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.6836575636023, 0, 0, 0, 0, 1, 2, 1, -0.7555775647369, -0.9790526896722, 0.647099990577, 0, 0, 0, 0, 1, 2, 1, -0.6531521361674, -0.9352478261406, 0.5835442055703, 0, 0, 0, 0, 1, 2, 1, -0.4507362158414, -0.8834406064397, 0.4845398400426, 0, 0, 0, 0, 1, 2, 1, -0.1214617070015, -0.816697653169, 0.343041904988, 0, 0, 0, 0, 1, 2, 1, 0.3575721235141, -0.729739743466, 0.1720099445637, 0, 0, 0, 0, 1, 2, 1, 0.9410108109328, -0.6290505891876, 0.03796886246342, 0, 0, 0, 0, 1, 2, 1, 1.399673185533, -0.5515486353869, 0.8912509381337, 0, 0, 0, 0}, - }, - { - .width = 20000, - .type = IIR_BIQUAD_LPF, - .stages = 15, - .coeffs = (float32_t[]){0.9275653605469, 0, 0, 0, 0, 1, 2, 1, -1.721658533587, -0.9886029086012, 0.9093240243363, 0, 0, 0, 0, 1, 2, 1, -1.673785057778, -0.9635110395671, 0.8781513561579, 0, 0, 0, 0, 1, 2, 1, -1.582945488801, -0.9296599358312, 0.8220243799729, 0, 0, 0, 0, 1, 2, 1, -1.41280229903, -0.8752952208621, 0.712966251766, 0, 0, 0, 0, 1, 2, 1, -1.07711451342, -0.7747504936445, 0.4918611014088, 0, 0, 0, 0, 1, 2, 1, -0.3928110912436, -0.5746333143917, 0.1540100983629, 0, 0, 0, 0, 1, 2, 1, 0.6545074245328, -0.2705478179843, 0.8912509381337, 0, 0, 0, 0}, - }, -}; - -//Public variables - -const uint32_t AUTIO_FILTERS_HPF_CW_LIST[CW_HPF_COUNT] = {0, 60, 100}; -const uint32_t AUTIO_FILTERS_HPF_SSB_LIST[SSB_HPF_COUNT] = {0, 60, 100, 200, 300, 400, 500}; -const uint32_t AUTIO_FILTERS_LPF_CW_LIST[CW_LPF_COUNT] = {100, 150, 200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000}; -const uint32_t AUTIO_FILTERS_LPF_SSB_LIST[SSB_LPF_COUNT] = {1400, 1600, 1800, 2100, 2300, 2500, 2700, 2900, 3000, 3200, 3400}; -const uint32_t AUTIO_FILTERS_LPF_AM_LIST[AM_LPF_COUNT] = {2100, 2300, 2500, 2700, 2900, 3000, 3200, 3400, 3600, 3800, 4000, 4500, 5000, 6000, 7000, 8000, 9000, 10000}; -const uint32_t AUTIO_FILTERS_LPF_NFM_LIST[NFM_LPF_COUNT] = {5000, 6000, 7000, 8000, 9000, 10000, 15000, 20000}; - -arm_fir_instance_f32 FIR_RX_Hilbert_I; // filter instances -arm_fir_instance_f32 FIR_RX_Hilbert_Q; -arm_fir_instance_f32 FIR_TX_Hilbert_I; -arm_fir_instance_f32 FIR_TX_Hilbert_Q; -arm_biquad_cascade_df2T_instance_f32 IIR_RX_LPF_I; -arm_biquad_cascade_df2T_instance_f32 IIR_RX_LPF_Q; -arm_biquad_cascade_df2T_instance_f32 IIR_RX_GAUSS; -arm_biquad_cascade_df2T_instance_f32 IIR_TX_LPF_I; -arm_biquad_cascade_df2T_instance_f32 IIR_RX_HPF_I; -arm_biquad_cascade_df2T_instance_f32 IIR_TX_HPF_I; -arm_biquad_cascade_df2T_instance_f32 IIR_RX_Squelch_HPF; -arm_biquad_cascade_df2T_instance_f32 EQ_RX_LOW_FILTER = {EQ_STAGES, EQ_RX_LOW_FILTER_State, EQ_RX_LOW_FILTER_Coeffs}; -arm_biquad_cascade_df2T_instance_f32 EQ_RX_MID_FILTER = {EQ_STAGES, EQ_RX_MID_FILTER_State, EQ_RX_MID_FILTER_Coeffs}; -arm_biquad_cascade_df2T_instance_f32 EQ_RX_HIG_FILTER = {EQ_STAGES, EQ_RX_HIG_FILTER_State, EQ_RX_HIG_FILTER_Coeffs}; -arm_biquad_cascade_df2T_instance_f32 EQ_MIC_LOW_FILTER = {EQ_STAGES, EQ_MIC_LOW_FILTER_State, EQ_MIC_LOW_FILTER_Coeffs}; -arm_biquad_cascade_df2T_instance_f32 EQ_MIC_MID_FILTER = {EQ_STAGES, EQ_MIC_MID_FILTER_State, EQ_MIC_MID_FILTER_Coeffs}; -arm_biquad_cascade_df2T_instance_f32 EQ_MIC_HIG_FILTER = {EQ_STAGES, EQ_MIC_HIG_FILTER_State, EQ_MIC_HIG_FILTER_Coeffs}; -volatile bool NeedReinitNotch = false; // need to re-initialize the manual Notch filter -volatile bool NeedReinitAudioFilters = false; // need to re-initialize Audio filters -volatile bool NeedReinitAudioFiltersClean = false; //also clean state - -// Prototypes -static void calcBiquad(BIQUAD_TYPE type, uint32_t Fc, uint32_t Fs, float32_t Q, float32_t peakGain, float32_t *outCoeffs); // automatic calculation of the Biquad filter for Notch -static IIR_BIQUAD_FILTER *getIIRFilter(IIR_BIQUAD_FILTER_TYPE type, uint_fast16_t width); // get filter from collection -static void arm_biquad_cascade_df2T_initNoClean_f32(arm_biquad_cascade_df2T_instance_f32 * S, uint8_t numStages, const float32_t * pCoeffs, float32_t * pState); //init without state-clean version - -// initialize audio filters -void InitAudioFilters(void) -{ - arm_fir_init_f32(&FIR_RX_Hilbert_I, IQ_HILBERT_TAPS, (float32_t *)&FIR_HILB_I_coeffs, (float32_t *)&Fir_RX_Hilbert_State_I[0], AUDIO_BUFFER_HALF_SIZE); - arm_fir_init_f32(&FIR_RX_Hilbert_Q, IQ_HILBERT_TAPS, (float32_t *)&FIR_HILB_Q_coeffs, (float32_t *)&Fir_RX_Hilbert_State_Q[0], AUDIO_BUFFER_HALF_SIZE); - - arm_fir_init_f32(&FIR_TX_Hilbert_I, IQ_HILBERT_TAPS, (float32_t *)&FIR_HILB_I_coeffs, (float32_t *)&Fir_Tx_Hilbert_State_I[0], AUDIO_BUFFER_HALF_SIZE); - arm_fir_init_f32(&FIR_TX_Hilbert_Q, IQ_HILBERT_TAPS, (float32_t *)&FIR_HILB_Q_coeffs, (float32_t *)&Fir_Tx_Hilbert_State_Q[0], AUDIO_BUFFER_HALF_SIZE); - - //Other - InitAutoNotchReduction(); - ReinitAudioFilters(); -} - -// reinitialize audio filters -void ReinitAudioFilters(void) -{ - //LPF - uint32_t lpf1_width = 2700; //default settings - if (CurrentVFO()->LPF_Filter_Width > 0) - lpf1_width = CurrentVFO()->LPF_Filter_Width; - IIR_BIQUAD_FILTER *lpf_filter = getIIRFilter(IIR_BIQUAD_LPF, lpf1_width); - arm_biquad_cascade_df2T_initNoClean_f32(&IIR_RX_LPF_I, lpf_filter->stages, (float32_t *)lpf_filter->coeffs, (float32_t *)&IIR_RX_LPF_I_State[0]); - arm_biquad_cascade_df2T_initNoClean_f32(&IIR_RX_LPF_Q, lpf_filter->stages, (float32_t *)lpf_filter->coeffs, (float32_t *)&IIR_RX_LPF_Q_State[0]); - arm_biquad_cascade_df2T_initNoClean_f32(&IIR_TX_LPF_I, lpf_filter->stages, (float32_t *)lpf_filter->coeffs, (float32_t *)&IIR_TX_LPF_I_State[0]); - - //RX GAUSS - IIR_BIQUAD_FILTER *gauss_filter = getIIRFilter(IIR_BIQUAD_LPF_GAUSS, 1000); - if (CurrentVFO()->Mode == TRX_MODE_CW_L || CurrentVFO()->Mode == TRX_MODE_CW_U) - gauss_filter = getIIRFilter(IIR_BIQUAD_LPF_GAUSS, lpf1_width); - arm_biquad_cascade_df2T_initNoClean_f32(&IIR_RX_GAUSS, gauss_filter->stages, (float32_t *)gauss_filter->coeffs, (float32_t *)&IIR_RX_GAUSS_State[0]); - - //HPF - uint32_t hpf1_width = 300; //default settings - if (CurrentVFO()->HPF_Filter_Width > 0) - hpf1_width = CurrentVFO()->HPF_Filter_Width; - IIR_BIQUAD_FILTER *hpf_filter = getIIRFilter(IIR_BIQUAD_HPF, hpf1_width); - arm_biquad_cascade_df2T_initNoClean_f32(&IIR_RX_HPF_I, hpf_filter->stages, (float32_t *)hpf_filter->coeffs, (float32_t *)&IIR_RX_HPF_I_State[0]); - arm_biquad_cascade_df2T_initNoClean_f32(&IIR_TX_HPF_I, hpf_filter->stages, (float32_t *)hpf_filter->coeffs, (float32_t *)&IIR_TX_HPF_I_State[0]); - - //FM Squelch - IIR_BIQUAD_FILTER *fm_sql_hpf_filter; - if (CurrentVFO()->LPF_Filter_Width > 15000 || CurrentVFO()->LPF_Filter_Width == 0) - fm_sql_hpf_filter = getIIRFilter(IIR_BIQUAD_HPF, 20000); - else - fm_sql_hpf_filter = getIIRFilter(IIR_BIQUAD_HPF, 15000); - arm_biquad_cascade_df2T_initNoClean_f32(&IIR_RX_Squelch_HPF, fm_sql_hpf_filter->stages, (float32_t *)fm_sql_hpf_filter->coeffs, (float32_t *)&IIR_RX_HPF_SQL_State[0]); - - //RX Equalizer - calcBiquad(BIQUAD_peak, 400, TRX_SAMPLERATE, 0.5f, TRX.RX_EQ_LOW, EQ_RX_LOW_FILTER_Coeffs); - calcBiquad(BIQUAD_peak, 1000, TRX_SAMPLERATE, 1.0f, TRX.RX_EQ_MID, EQ_RX_MID_FILTER_Coeffs); - calcBiquad(BIQUAD_peak, 2000, TRX_SAMPLERATE, 1.5f, TRX.RX_EQ_HIG, EQ_RX_HIG_FILTER_Coeffs); - - //MIC Equalizer - calcBiquad(BIQUAD_peak, 400, TRX_SAMPLERATE, 0.5f, TRX.MIC_EQ_LOW, EQ_MIC_LOW_FILTER_Coeffs); - calcBiquad(BIQUAD_peak, 1000, TRX_SAMPLERATE, 1.0f, TRX.MIC_EQ_MID, EQ_MIC_MID_FILTER_Coeffs); - calcBiquad(BIQUAD_peak, 2000, TRX_SAMPLERATE, 1.5f, TRX.MIC_EQ_HIG, EQ_MIC_HIG_FILTER_Coeffs); - - //All done - NeedReinitAudioFilters = false; - NeedReinitAudioFiltersClean = false; -} - -// start DC corrector -void dc_filter(float32_t *Buffer, int16_t blockSize, DC_FILTER_STATE stateNum) // removes the constant component of the signal -{ - static const float32_t A1 = (1.0f - 0.00048828125f); // (1-2^(-11)) - - for (uint16_t i = 0; i < blockSize; i++) - { - float32_t sampleIn = Buffer[i]; - float32_t sampleOut = 0; - float32_t delta_x = sampleIn - DC_Filter_State[stateNum].x_prev; - float32_t a1_y_prev = A1 * DC_Filter_State[stateNum].y_prev; - sampleOut = delta_x + a1_y_prev; - DC_Filter_State[stateNum].x_prev = sampleIn; - DC_Filter_State[stateNum].y_prev = sampleOut; - Buffer[i] = sampleOut; - } -} - -// get filter from collection -static IIR_BIQUAD_FILTER *getIIRFilter(IIR_BIQUAD_FILTER_TYPE type, uint_fast16_t width) -{ - for (uint16_t i = 0; i < IIR_FILTERS_COUNT; i++) - if (IIR_Biquad_Filters[i].type == type && IIR_Biquad_Filters[i].width == width) - return (IIR_BIQUAD_FILTER *)&IIR_Biquad_Filters[i]; - sendToDebug_strln("Wrong filter length"); - sendToDebug_uint16(type, false); - sendToDebug_uint16((uint16_t)width, false); - return (IIR_BIQUAD_FILTER *)&IIR_Biquad_Filters[0]; -} - -// automatic calculation of the Biquad filter -static void calcBiquad(BIQUAD_TYPE type, uint32_t Fc, uint32_t Fs, float32_t Q, float32_t peakGain, float32_t *outCoeffs) -{ - float32_t a0, a1, a2, b1, b2, norm; - - float32_t V = powf(10.0f, fabsf(peakGain) / 20.0f); - float32_t K = tanf(PI * Fc / Fs); - switch (type) - { - case BIQUAD_onepolelp: - b1 = expf(-2.0f * PI * (Fc / Fs)); - a0 = 1.0f - b1; - b1 = -b1; - a1 = a2 = b2 = 0.0f; - break; - - case BIQUAD_onepolehp: - b1 = -expf(-2.0f * PI * (0.5f - Fc / Fs)); - a0 = 1.0f + b1; - b1 = -b1; - a1 = a2 = b2 = 0.0f; - break; - - case BIQUAD_lowpass: - norm = 1.0f / (1.0f + K / Q + K * K); - a0 = K * K * norm; - a1 = 2.0f * a0; - a2 = a0; - b1 = 2.0f * (K * K - 1.0f) * norm; - b2 = (1.0f - K / Q + K * K) * norm; - break; - - case BIQUAD_highpass: - norm = 1.0f / (1.0f + K / Q + K * K); - a0 = 1.0f * norm; - a1 = -2.0f * a0; - a2 = a0; - b1 = 2.0f * (K * K - 1.0f) * norm; - b2 = (1.0f - K / Q + K * K) * norm; - break; - - case BIQUAD_bandpass: - norm = 1.0f / (1.0f + K / Q + K * K); - a0 = K / Q * norm; - a1 = 0.0f; - a2 = -a0; - b1 = 2.0f * (K * K - 1.0f) * norm; - b2 = (1.0f - K / Q + K * K) * norm; - break; - - case BIQUAD_notch: - norm = 1.0f / (1.0f + K / Q + K * K); - a0 = (1.0f + K * K) * norm; - a1 = 2.0f * (K * K - 1.0f) * norm; - a2 = a0; - b1 = a1; - b2 = (1.0f - K / Q + K * K) * norm; - break; - - case BIQUAD_peak: - if (peakGain >= 0.0f) - { - norm = 1.0f / (1.0f + 1.0f / Q * K + K * K); - a0 = (1.0f + V / Q * K + K * K) * norm; - a1 = 2.0f * (K * K - 1.0f) * norm; - a2 = (1.0f - V / Q * K + K * K) * norm; - b1 = a1; - b2 = (1.0f - 1.0f / Q * K + K * K) * norm; - } - else - { - norm = 1.0f / (1.0f + V / Q * K + K * K); - a0 = (1.0f + 1.0f / Q * K + K * K) * norm; - a1 = 2.0f * (K * K - 1.0f) * norm; - a2 = (1.0f - 1.0f / Q * K + K * K) * norm; - b1 = a1; - b2 = (1.0f - V / Q * K + K * K) * norm; - } - break; - case BIQUAD_lowShelf: - if (peakGain >= 0.0f) - { - norm = 1.0f / (1.0f + SQRT2 * K + K * K); - a0 = (1.0f + sqrtf(2.0f * V) * K + V * K * K) * norm; - a1 = 2.0f * (V * K * K - 1.0f) * norm; - a2 = (1.0f - sqrtf(2.0f * V) * K + V * K * K) * norm; - b1 = 2.0f * (K * K - 1.0f) * norm; - b2 = (1.0f - SQRT2 * K + K * K) * norm; - } - else - { - norm = 1.0f / (1.0f + sqrtf(2.0f * V) * K + V * K * K); - a0 = (1.0f + SQRT2 * K + K * K) * norm; - a1 = 2.0f * (K * K - 1.0f) * norm; - a2 = (1.0f - SQRT2 * K + K * K) * norm; - b1 = 2.0f * (V * K * K - 1.0f) * norm; - b2 = (1.0f - sqrtf(2.0f * V) * K + V * K * K) * norm; - } - break; - case BIQUAD_highShelf: - if (peakGain >= 0.0f) - { - norm = 1.0f / (1.0f + SQRT2 * K + K * K); - a0 = (V + sqrtf(2.0f * V) * K + K * K) * norm; - a1 = 2.0f * (K * K - V) * norm; - a2 = (V - sqrtf(2.0f * V) * K + K * K) * norm; - b1 = 2.0f * (K * K - 1.0f) * norm; - b2 = (1.0f - SQRT2 * K + K * K) * norm; - } - else - { - norm = 1.0f / (V + sqrtf(2.0f * V) * K + K * K); - a0 = (1.0f + SQRT2 * K + K * K) * norm; - a1 = 2.0f * (K * K - 1.0f) * norm; - a2 = (1.0f - SQRT2 * K + K * K) * norm; - b1 = 2.0f * (K * K - V) * norm; - b2 = (V - sqrtf(2.0f * V) * K + K * K) * norm; - } - break; - } - - //save coefficients - outCoeffs[0] = a0; - outCoeffs[1] = a1; - outCoeffs[2] = a2; - outCoeffs[3] = -b1; - outCoeffs[4] = -b2; -} - -static void arm_biquad_cascade_df2T_initNoClean_f32(arm_biquad_cascade_df2T_instance_f32 * S, uint8_t numStages, const float32_t * pCoeffs, float32_t * pState) -{ - if(NeedReinitAudioFiltersClean) //original func - { - arm_biquad_cascade_df2T_init_f32(S, numStages, pCoeffs, pState); - return; - } - - /* Assign filter stages */ - S->numStages = numStages; - - /* Assign coefficient pointer */ - S->pCoeffs = pCoeffs; - - /* Assign state pointer */ - S->pState = pState; -} diff --git a/Src/audio_filters.h b/Src/audio_filters.h deleted file mode 100644 index f5561c4..0000000 --- a/Src/audio_filters.h +++ /dev/null @@ -1,111 +0,0 @@ -#ifndef AUDIO_FILTERS_h -#define AUDIO_FILTERS_h - -#include "stm32f4xx_hal.h" -#include -#include -#include -#include "fpga.h" -#include "functions.h" - -#define IIR_FILTERS_COUNT 69 // Total Filters In The Collection -#define IQ_HILBERT_TAPS 65 // Hilbert filter order -#define IIR_MAX_STAGES 15 // Maximum order of IIR filters -#define EQ_STAGES 1 // order of the biquad of the equalizer filter -#define BIQUAD_COEFF_IN_STAGE 5 // coefficients in manual Notch filter order -#define FIR_RX_HILBERT_STATE_SIZE (IQ_HILBERT_TAPS + AUDIO_BUFFER_HALF_SIZE - 1) // size of state buffers -#define FIR_TX_HILBERT_STATE_SIZE (IQ_HILBERT_TAPS + AUDIO_BUFFER_HALF_SIZE - 1) -#define IIR_RX_LPF_Taps_STATE_SIZE (IIR_MAX_STAGES * 2) -#define IIR_RX_GAUSS_Taps_STATE_SIZE (IIR_MAX_STAGES * 2) -#define IIR_TX_LPF_Taps_STATE_SIZE (IIR_MAX_STAGES * 2) -#define IIR_RX_HPF_Taps_STATE_SIZE (IIR_MAX_STAGES * 2) -#define IIR_TX_HPF_Taps_STATE_SIZE (IIR_MAX_STAGES * 2) -#define IIR_RX_HPF_SQL_STATE_SIZE (IIR_MAX_STAGES * 2) - -#define CW_HPF_COUNT 3 -#define SSB_HPF_COUNT 7 -#define CW_LPF_COUNT 19 -#define SSB_LPF_COUNT 11 -#define AM_LPF_COUNT 18 -#define NFM_LPF_COUNT 8 - -#define MAX_HPF_WIDTH_CW 100 -#define MAX_HPF_WIDTH_SSB 500 -#define MAX_LPF_WIDTH_CW 1000 -#define MAX_LPF_WIDTH_SSB 3400 -#define MAX_LPF_WIDTH_AM 10000 -#define MAX_LPF_WIDTH_NFM 20000 - -typedef enum // BiQuad filter type for automatic calculation -{ - BIQUAD_onepolelp, - BIQUAD_onepolehp, - BIQUAD_lowpass, - BIQUAD_highpass, - BIQUAD_bandpass, - BIQUAD_notch, - BIQUAD_peak, - BIQUAD_lowShelf, - BIQUAD_highShelf -} BIQUAD_TYPE; - -typedef enum // type of filter in the collection -{ - IIR_BIQUAD_HPF, - IIR_BIQUAD_LPF, - IIR_BIQUAD_LPF_GAUSS -} IIR_BIQUAD_FILTER_TYPE; - -typedef enum // states of DC correctors for each user -{ - DC_FILTER_RX_I, - DC_FILTER_RX_Q, - DC_FILTER_TX_I, - DC_FILTER_TX_Q, - DC_FILTER_FFT_I, - DC_FILTER_FFT_Q, -} DC_FILTER_STATE; - -typedef struct // keep old sample values for DC filter. Multiple states for different consumers -{ - float32_t x_prev; - float32_t y_prev; -} DC_filter_state_type; - -typedef struct // filter in collection -{ - const IIR_BIQUAD_FILTER_TYPE type; - const float32_t *coeffs; // Coefficients converted to ARMA in reverse order by MATLAB - const uint8_t stages; - const uint16_t width; -} IIR_BIQUAD_FILTER; - -// Public variables -extern arm_fir_instance_f32 FIR_RX_Hilbert_I; // filter instances -extern arm_fir_instance_f32 FIR_RX_Hilbert_Q; -extern arm_fir_instance_f32 FIR_TX_Hilbert_I; -extern arm_fir_instance_f32 FIR_TX_Hilbert_Q; -extern arm_biquad_cascade_df2T_instance_f32 IIR_RX_LPF_I; -extern arm_biquad_cascade_df2T_instance_f32 IIR_RX_LPF_Q; -extern arm_biquad_cascade_df2T_instance_f32 IIR_RX_GAUSS; -extern arm_biquad_cascade_df2T_instance_f32 IIR_TX_LPF_I; -extern arm_biquad_cascade_df2T_instance_f32 IIR_TX_LPF_Q; -extern arm_biquad_cascade_df2T_instance_f32 IIR_RX_HPF_I; -extern arm_biquad_cascade_df2T_instance_f32 IIR_RX_HPF_Q; -extern arm_biquad_cascade_df2T_instance_f32 IIR_TX_HPF_I; -extern arm_biquad_cascade_df2T_instance_f32 IIR_TX_HPF_Q; -extern arm_biquad_cascade_df2T_instance_f32 IIR_RX_Squelch_HPF; -extern arm_biquad_cascade_df2T_instance_f32 EQ_RX_LOW_FILTER; -extern arm_biquad_cascade_df2T_instance_f32 EQ_RX_MID_FILTER; -extern arm_biquad_cascade_df2T_instance_f32 EQ_RX_HIG_FILTER; -extern arm_biquad_cascade_df2T_instance_f32 EQ_MIC_LOW_FILTER; -extern arm_biquad_cascade_df2T_instance_f32 EQ_MIC_MID_FILTER; -extern arm_biquad_cascade_df2T_instance_f32 EQ_MIC_HIG_FILTER; -extern volatile bool NeedReinitAudioFilters; // need to reinitialize the Audio filters - -//Public methods -extern void InitAudioFilters(void); // initialize audio filters -extern void ReinitAudioFilters(void); // reinitialize audio filters -extern void dc_filter(float32_t *Buffer, int16_t blockSize, uint8_t stateNum); // start DC corrector - -#endif diff --git a/Src/audio_processor.c b/Src/audio_processor.c deleted file mode 100644 index bcf8e53..0000000 --- a/Src/audio_processor.c +++ /dev/null @@ -1,868 +0,0 @@ -#include "audio_processor.h" -#include "wm8731.h" -#include "audio_filters.h" -#include "agc.h" -#include "settings.h" -#include "usbd_audio_if.h" -#include "auto_notch.h" -#include "trx_manager.h" - -// Public variables -volatile uint32_t AUDIOPROC_samples = 0; // audio samples processed in the processor -IRAM1 int32_t Processor_AudioBuffer_A[AUDIO_BUFFER_SIZE] = {0}; // buffer A of the audio processor -IRAM1 int32_t Processor_AudioBuffer_B[AUDIO_BUFFER_SIZE] = {0}; // buffer B of the audio processor -volatile uint_fast8_t Processor_AudioBuffer_ReadyBuffer = 0; // which buffer is currently in use, A or B -volatile bool Processor_NeedRXBuffer = false; // codec needs data from processor for RX -volatile bool Processor_NeedTXBuffer = false; // codec needs data from processor for TX -IRAM1 float32_t FPGA_Audio_Buffer_RX_Q_tmp[FPGA_RX_IQ_BUFFER_HALF_SIZE] = {0}; // copy of the working part of the FPGA buffers for processing -IRAM1 float32_t FPGA_Audio_Buffer_RX_I_tmp[FPGA_RX_IQ_BUFFER_HALF_SIZE] = {0}; -IRAM1 float32_t FPGA_Audio_Buffer_TX_Q_tmp[FPGA_TX_IQ_BUFFER_HALF_SIZE] = {0}; -IRAM1 float32_t FPGA_Audio_Buffer_TX_I_tmp[FPGA_TX_IQ_BUFFER_HALF_SIZE] = {0}; -volatile float32_t Processor_RX_Power_value; // RX signal magnitude -volatile float32_t Processor_selected_RFpower_amplitude = 0.0f; // target TX signal amplitude -volatile float32_t Processor_TX_MAX_amplitude_OUT; // TX uplift after ALC - -// Private variables -static uint32_t two_signal_gen_position = 0; // signal position in a two-signal generator -static float32_t ALC_need_gain = 1.0f; // current gain of ALC and audio compressor -static float32_t ALC_need_gain_target = 1.0f; // Target Gain Of ALC And Audio Compressor -static float32_t DFM_RX_lpf_prev = 0, DFM_RX_hpf_prev_a = 0, DFM_RX_hpf_prev_b = 0; // used in FM detection and low / high pass processing -static float32_t DFM_RX_i_prev = 0, DFM_RX_q_prev = 0; // used in FM detection and low / high pass processing -static uint_fast8_t DFM_RX_fm_sql_count = 0; // used for squelch processing and debouncing tone detection, respectively -static float32_t DFM_RX_fm_sql_avg = 0.0f; // average SQL in FM -static bool DFM_RX_Squelched = false; -static float32_t current_if_gain = 0.0f; -static float32_t volume_gain = 0.0f; - -// Prototypes -static void doRX_HILBERT(uint16_t size); // Hilbert filter for phase shift of signals -static void doRX_LPF_IQ(uint16_t size); // Low-pass filter for I and Q -static void doRX_LPF_I(uint16_t size); // LPF filter for I -static void doRX_GAUSS_I(uint16_t size); // Gauss filter for I -static void doRX_HPF_I(uint16_t size); // HPF filter for I -static void doRX_AGC(uint16_t size, uint_fast8_t mode); // automatic gain control -static void doRX_NOTCH(uint16_t size); // notch filter -static void doRX_SMETER(uint16_t size); // s-meter -static void doRX_COPYCHANNEL(uint16_t size); // copy I to Q channel -static void DemodulateFM(uint16_t size); // FM demodulator -static void ModulateFM(uint16_t size); // FM modulator -static void doRX_EQ(uint16_t size); // receiver equalizer -static void doMIC_EQ(uint16_t size); // microphone equalizer -static void doRX_IFGain(uint16_t size); //IF gain - -// initialize audio processor -void initAudioProcessor(void) -{ - InitAudioFilters(); -} - -// start audio processor for RX -void processRxAudio(void) -{ - if (!Processor_NeedRXBuffer) - return; - - VFO *current_vfo = CurrentVFO(); - - AUDIOPROC_samples++; - - uint_fast16_t FPGA_Audio_Buffer_Index_tmp = FPGA_Audio_RXBuffer_Index; - if (FPGA_Audio_Buffer_Index_tmp == 0) - FPGA_Audio_Buffer_Index_tmp = FPGA_RX_IQ_BUFFER_SIZE; - else - FPGA_Audio_Buffer_Index_tmp--; - - // copy buffer from FPGA - readFromCircleBuffer32((uint32_t *)&FPGA_Audio_Buffer_RX_Q[0], (uint32_t *)&FPGA_Audio_Buffer_RX_Q_tmp[0], FPGA_Audio_Buffer_Index_tmp, FPGA_RX_IQ_BUFFER_SIZE, FPGA_RX_IQ_BUFFER_HALF_SIZE); - readFromCircleBuffer32((uint32_t *)&FPGA_Audio_Buffer_RX_I[0], (uint32_t *)&FPGA_Audio_Buffer_RX_I_tmp[0], FPGA_Audio_Buffer_Index_tmp, FPGA_RX_IQ_BUFFER_SIZE, FPGA_RX_IQ_BUFFER_HALF_SIZE); - - //Process DC corrector filter - if (current_vfo->Mode != TRX_MODE_AM && current_vfo->Mode != TRX_MODE_NFM && current_vfo->Mode != TRX_MODE_WFM) - { - dc_filter(FPGA_Audio_Buffer_RX_I_tmp, FPGA_RX_IQ_BUFFER_HALF_SIZE, DC_FILTER_RX_I); - dc_filter(FPGA_Audio_Buffer_RX_Q_tmp, FPGA_RX_IQ_BUFFER_HALF_SIZE, DC_FILTER_RX_Q); - } - - //IQ Phase corrector https://github.com/df8oe/UHSDR/wiki/IQ---correction-and-mirror-frequencies - if(AUDIOPROC_samples == 1) - { - float32_t teta1_new = 0; - float32_t teta3_new = 0; - static float32_t teta1 = 0; - static float32_t teta3 = 0; - for (uint16_t i = 0; i < FPGA_RX_IQ_BUFFER_HALF_SIZE; i++) - { - teta1_new += FPGA_Audio_Buffer_RX_Q_tmp[i] * (FPGA_Audio_Buffer_RX_I_tmp[i] < 0.0f ? -1.0f : 1.0f); - teta3_new += FPGA_Audio_Buffer_RX_Q_tmp[i] * (FPGA_Audio_Buffer_RX_Q_tmp[i] < 0.0f ? -1.0f : 1.0f); - } - teta1_new = teta1_new / (float32_t)FPGA_RX_IQ_BUFFER_HALF_SIZE; - teta3_new = teta3_new / (float32_t)FPGA_RX_IQ_BUFFER_HALF_SIZE; - teta1 = 0.003f * teta1_new + 0.997f * teta1; - teta3 = 0.003f * teta3_new + 0.997f * teta3; - if (teta3 > 0.0f) - TRX_IQ_phase_error = asinf(teta1 / teta3); - } - - if(current_vfo->Mode != TRX_MODE_IQ) - doRX_IFGain(FPGA_RX_IQ_BUFFER_HALF_SIZE); - - switch (current_vfo->Mode) // first receiver - { - case TRX_MODE_LSB: - case TRX_MODE_CW_L: - doRX_HILBERT(FPGA_RX_IQ_BUFFER_HALF_SIZE); - arm_sub_f32(FPGA_Audio_Buffer_RX_I_tmp, FPGA_Audio_Buffer_RX_Q_tmp, FPGA_Audio_Buffer_RX_I_tmp, FPGA_RX_IQ_BUFFER_HALF_SIZE); // difference of I and Q - LSB - doRX_HPF_I(FPGA_RX_IQ_BUFFER_HALF_SIZE); - doRX_LPF_I(FPGA_RX_IQ_BUFFER_HALF_SIZE); - doRX_GAUSS_I(FPGA_RX_IQ_BUFFER_HALF_SIZE); - doRX_NOTCH(FPGA_RX_IQ_BUFFER_HALF_SIZE); - doRX_SMETER(FPGA_RX_IQ_BUFFER_HALF_SIZE); - doRX_AGC(FPGA_RX_IQ_BUFFER_HALF_SIZE, current_vfo->Mode); - doRX_COPYCHANNEL(FPGA_RX_IQ_BUFFER_HALF_SIZE); - break; - case TRX_MODE_DIGI_L: - doRX_HILBERT(FPGA_RX_IQ_BUFFER_HALF_SIZE); - arm_sub_f32(FPGA_Audio_Buffer_RX_I_tmp, FPGA_Audio_Buffer_RX_Q_tmp, FPGA_Audio_Buffer_RX_I_tmp, FPGA_RX_IQ_BUFFER_HALF_SIZE); // difference of I and Q - LSB - doRX_LPF_I(FPGA_RX_IQ_BUFFER_HALF_SIZE); - doRX_SMETER(FPGA_RX_IQ_BUFFER_HALF_SIZE); - doRX_AGC(FPGA_RX_IQ_BUFFER_HALF_SIZE, current_vfo->Mode); - doRX_COPYCHANNEL(FPGA_RX_IQ_BUFFER_HALF_SIZE); - break; - case TRX_MODE_USB: - case TRX_MODE_CW_U: - doRX_HILBERT(FPGA_RX_IQ_BUFFER_HALF_SIZE); - arm_add_f32(FPGA_Audio_Buffer_RX_I_tmp, FPGA_Audio_Buffer_RX_Q_tmp, FPGA_Audio_Buffer_RX_I_tmp, FPGA_RX_IQ_BUFFER_HALF_SIZE); // sum of I and Q - USB - doRX_HPF_I(FPGA_RX_IQ_BUFFER_HALF_SIZE); - doRX_LPF_I(FPGA_RX_IQ_BUFFER_HALF_SIZE); - doRX_GAUSS_I(FPGA_RX_IQ_BUFFER_HALF_SIZE); - doRX_NOTCH(FPGA_RX_IQ_BUFFER_HALF_SIZE); - doRX_SMETER(FPGA_RX_IQ_BUFFER_HALF_SIZE); - doRX_AGC(FPGA_RX_IQ_BUFFER_HALF_SIZE, current_vfo->Mode); - doRX_COPYCHANNEL(FPGA_RX_IQ_BUFFER_HALF_SIZE); - break; - case TRX_MODE_DIGI_U: - doRX_HILBERT(FPGA_RX_IQ_BUFFER_HALF_SIZE); - arm_add_f32(FPGA_Audio_Buffer_RX_I_tmp, FPGA_Audio_Buffer_RX_Q_tmp, FPGA_Audio_Buffer_RX_I_tmp, FPGA_RX_IQ_BUFFER_HALF_SIZE); // sum of I and Q - USB - doRX_LPF_I(FPGA_RX_IQ_BUFFER_HALF_SIZE); - doRX_SMETER(FPGA_RX_IQ_BUFFER_HALF_SIZE); - doRX_AGC(FPGA_RX_IQ_BUFFER_HALF_SIZE, current_vfo->Mode); - doRX_COPYCHANNEL(FPGA_RX_IQ_BUFFER_HALF_SIZE); - break; - case TRX_MODE_AM: - doRX_LPF_IQ(FPGA_RX_IQ_BUFFER_HALF_SIZE); - arm_mult_f32(FPGA_Audio_Buffer_RX_I_tmp, FPGA_Audio_Buffer_RX_I_tmp, FPGA_Audio_Buffer_RX_I_tmp, FPGA_RX_IQ_BUFFER_HALF_SIZE); - arm_mult_f32(FPGA_Audio_Buffer_RX_Q_tmp, FPGA_Audio_Buffer_RX_Q_tmp, FPGA_Audio_Buffer_RX_Q_tmp, FPGA_RX_IQ_BUFFER_HALF_SIZE); - arm_add_f32(FPGA_Audio_Buffer_RX_I_tmp, FPGA_Audio_Buffer_RX_Q_tmp, FPGA_Audio_Buffer_RX_I_tmp, FPGA_RX_IQ_BUFFER_HALF_SIZE); - //arm_vsqrt_f32(FPGA_Audio_Buffer_RX_I_tmp, FPGA_Audio_Buffer_RX_I_tmp, FPGA_AUDIO_BUFFER_HALF_SIZE); - for (uint_fast16_t i = 0; i < FPGA_RX_IQ_BUFFER_HALF_SIZE; i++) - arm_sqrt_f32(FPGA_Audio_Buffer_RX_I_tmp[i], &FPGA_Audio_Buffer_RX_I_tmp[i]); - arm_scale_f32(FPGA_Audio_Buffer_RX_I_tmp, 0.5f, FPGA_Audio_Buffer_RX_I_tmp, FPGA_RX_IQ_BUFFER_HALF_SIZE); - doRX_NOTCH(FPGA_RX_IQ_BUFFER_HALF_SIZE); - doRX_SMETER(FPGA_RX_IQ_BUFFER_HALF_SIZE); - doRX_AGC(FPGA_RX_IQ_BUFFER_HALF_SIZE, current_vfo->Mode); - doRX_COPYCHANNEL(FPGA_RX_IQ_BUFFER_HALF_SIZE); - break; - case TRX_MODE_NFM: - doRX_LPF_IQ(FPGA_RX_IQ_BUFFER_HALF_SIZE); - case TRX_MODE_WFM: - doRX_SMETER(FPGA_RX_IQ_BUFFER_HALF_SIZE); - DemodulateFM(FPGA_RX_IQ_BUFFER_HALF_SIZE); - //end decimate - doRX_AGC(FPGA_RX_IQ_BUFFER_HALF_SIZE, current_vfo->Mode); - doRX_COPYCHANNEL(FPGA_RX_IQ_BUFFER_HALF_SIZE); - break; - case TRX_MODE_IQ: - default: - doRX_SMETER(FPGA_RX_IQ_BUFFER_HALF_SIZE); - break; - } - - //Prepare data to DMA - int32_t *Processor_AudioBuffer_current; - if (Processor_AudioBuffer_ReadyBuffer == 0) - Processor_AudioBuffer_current = &Processor_AudioBuffer_B[0]; - else - Processor_AudioBuffer_current = &Processor_AudioBuffer_A[0]; - - // receiver equalizer - if (current_vfo->Mode != TRX_MODE_DIGI_L && current_vfo->Mode != TRX_MODE_DIGI_U && current_vfo->Mode != TRX_MODE_IQ) - doRX_EQ(FPGA_RX_IQ_BUFFER_HALF_SIZE); - - // muting - if (TRX_Mute) - arm_scale_f32(FPGA_Audio_Buffer_RX_I_tmp, 0.0f, FPGA_Audio_Buffer_RX_I_tmp, FPGA_RX_IQ_BUFFER_HALF_SIZE); - - // create buffers for transmission to the codec - for (uint_fast16_t i = 0; i < FPGA_RX_IQ_BUFFER_HALF_SIZE; i++) - { - arm_float_to_q31(&FPGA_Audio_Buffer_RX_I_tmp[i], &Processor_AudioBuffer_current[i * 2], 1); //left channel - if (current_vfo->Mode == TRX_MODE_IQ) - arm_float_to_q31(&FPGA_Audio_Buffer_RX_Q_tmp[i], &Processor_AudioBuffer_current[i * 2 + 1], 1); //right channel - else - arm_float_to_q31(&FPGA_Audio_Buffer_RX_I_tmp[i], &Processor_AudioBuffer_current[i * 2 + 1], 1); //right channel - } - if (Processor_AudioBuffer_ReadyBuffer == 0) - Processor_AudioBuffer_ReadyBuffer = 1; - else - Processor_AudioBuffer_ReadyBuffer = 0; - - //Send to USB Audio - if (USB_AUDIO_need_rx_buffer && TRX_Inited) - { - uint8_t *USB_AUDIO_rx_buffer_current; - - if (!USB_AUDIO_current_rx_buffer) - USB_AUDIO_rx_buffer_current = &USB_AUDIO_rx_buffer_a[0]; - else - USB_AUDIO_rx_buffer_current = &USB_AUDIO_rx_buffer_b[0]; - - //drop LSB 32b->24b - for (uint_fast16_t i = 0; i < (USB_AUDIO_RX_BUFFER_SIZE / BYTES_IN_SAMPLE_AUDIO_OUT_PACKET); i++) - { - USB_AUDIO_rx_buffer_current[i * BYTES_IN_SAMPLE_AUDIO_OUT_PACKET + 0] = (Processor_AudioBuffer_current[i] >> 8) & 0xFF; - USB_AUDIO_rx_buffer_current[i * BYTES_IN_SAMPLE_AUDIO_OUT_PACKET + 1] = (Processor_AudioBuffer_current[i] >> 16) & 0xFF; - USB_AUDIO_rx_buffer_current[i * BYTES_IN_SAMPLE_AUDIO_OUT_PACKET + 2] = (Processor_AudioBuffer_current[i] >> 24) & 0xFF; - } - USB_AUDIO_need_rx_buffer = false; - } - - //OUT Volume - float32_t volume_gain_new = volume2rate((float32_t)TRX.Volume / 100.0f); - volume_gain = 0.9f * volume_gain + 0.1f * volume_gain_new; - for (uint_fast16_t i = 0; i < AUDIO_BUFFER_SIZE; i++) - { - Processor_AudioBuffer_current[i] = (int32_t)((float32_t)Processor_AudioBuffer_current[i] * volume_gain); - Processor_AudioBuffer_current[i] = convertToSPIBigEndian(Processor_AudioBuffer_current[i]); //for 32bit audio - } - - //Beep signal - if(WM8731_Beeping) - { - float32_t signal = 0; - int32_t out = 0; - float32_t amplitude = volume2rate((float32_t)TRX.Volume / 100.0f) * 0.1f; - for(uint32_t pos = 0; pos < AUDIO_BUFFER_HALF_SIZE; pos++) - { - signal = generateSin(amplitude, pos, TRX_SAMPLERATE, 1500); - arm_float_to_q31(&signal, &out, 1); - Processor_AudioBuffer_current[pos * 2] = convertToSPIBigEndian(out); //left channel - Processor_AudioBuffer_current[pos * 2 + 1] = Processor_AudioBuffer_current[pos * 2]; //right channel - } - } - - //Mute codec - if(WM8731_Muting) - { - for(uint32_t pos = 0; pos < AUDIO_BUFFER_HALF_SIZE; pos++) - { - Processor_AudioBuffer_current[pos * 2] = 0; //left channel - Processor_AudioBuffer_current[pos * 2 + 1] = 0; //right channel - } - } - - //Send to Codec DMA - if (TRX_Inited) - { - if (WM8731_DMA_state) //complete - { - HAL_DMA_Start_IT(&hdma_memtomem_dma2_stream1, (uint32_t)&Processor_AudioBuffer_current[0], (uint32_t)&CODEC_Audio_Buffer_RX[AUDIO_BUFFER_SIZE], CODEC_AUDIO_BUFFER_HALF_SIZE); //*2 -> left_right - //HAL_DMA_PollForTransfer(&hdma_memtomem_dma2_stream1, HAL_DMA_FULL_TRANSFER, HAL_MAX_DELAY); - } - else //half - { - HAL_DMA_Start_IT(&hdma_memtomem_dma2_stream2, (uint32_t)&Processor_AudioBuffer_current[0], (uint32_t)&CODEC_Audio_Buffer_RX[0], CODEC_AUDIO_BUFFER_HALF_SIZE); //*2 -> left_right - //HAL_DMA_PollForTransfer(&hdma_memtomem_dma2_stream2, HAL_DMA_FULL_TRANSFER, HAL_MAX_DELAY); - } - } - - Processor_NeedRXBuffer = false; -} - -// start audio processor for TX -void processTxAudio(void) -{ - if (!Processor_NeedTXBuffer) - return; - VFO *current_vfo = CurrentVFO(); - AUDIOPROC_samples++; - uint_fast8_t mode = current_vfo->Mode; - - // get the amplitude for the selected power and range - Processor_selected_RFpower_amplitude = log10f_fast(((float32_t)TRX.RF_Power * 0.9f + 10.0f) / 10.0f) * TRX_MAX_TX_Amplitude; - if (Processor_selected_RFpower_amplitude < 0.0f) - Processor_selected_RFpower_amplitude = 0.0f; - - if (mode == TRX_MODE_LOOPBACK && !TRX_Tune) - Processor_selected_RFpower_amplitude = 0.5f; - - // zero beats - if ((TRX_Tune && !TRX.TWO_SIGNAL_TUNE) || (TRX_Tune && (mode == TRX_MODE_CW_L || mode == TRX_MODE_CW_U))) - Processor_selected_RFpower_amplitude = Processor_selected_RFpower_amplitude * 1.0f; - - if (TRX.InputType_USB) //USB AUDIO - { - uint32_t buffer_index = USB_AUDIO_GetTXBufferIndex_FS() / BYTES_IN_SAMPLE_AUDIO_OUT_PACKET; //buffer 8bit, data 24 bit - if ((buffer_index % BYTES_IN_SAMPLE_AUDIO_OUT_PACKET) == 1) - buffer_index -= (buffer_index % BYTES_IN_SAMPLE_AUDIO_OUT_PACKET); - readHalfFromCircleUSBBuffer24Bit(&USB_AUDIO_tx_buffer[0], &Processor_AudioBuffer_A[0], buffer_index, (USB_AUDIO_TX_BUFFER_SIZE / BYTES_IN_SAMPLE_AUDIO_OUT_PACKET)); - } - else //AUDIO CODEC AUDIO - { - uint32_t dma_index = CODEC_AUDIO_BUFFER_SIZE - (uint16_t)__HAL_DMA_GET_COUNTER(hi2s3.hdmarx); - if ((dma_index % 2) == 1) - dma_index--; - readFromCircleBuffer32((uint32_t *)&CODEC_Audio_Buffer_TX[0], (uint32_t *)&Processor_AudioBuffer_A[0], dma_index, CODEC_AUDIO_BUFFER_SIZE, AUDIO_BUFFER_SIZE); - } - - //One-signal zero-tune generator - if (TRX_Tune && !TRX.TWO_SIGNAL_TUNE) - { - for (uint_fast16_t i = 0; i < AUDIO_BUFFER_HALF_SIZE; i++) - { - FPGA_Audio_Buffer_TX_I_tmp[i] = (Processor_selected_RFpower_amplitude / 100.0f * TUNE_POWER); - FPGA_Audio_Buffer_TX_Q_tmp[i] = 0.0f; - } - } - - //Two-signal tune generator - if (TRX_Tune && TRX.TWO_SIGNAL_TUNE) - { - for (uint_fast16_t i = 0; i < AUDIO_BUFFER_HALF_SIZE; i++) - { - float32_t point = generateSin((Processor_selected_RFpower_amplitude / 100.0f * TUNE_POWER) / 2.0f, two_signal_gen_position, TRX_SAMPLERATE, 1000); - point += generateSin((Processor_selected_RFpower_amplitude / 100.0f * TUNE_POWER) / 2.0f, two_signal_gen_position, TRX_SAMPLERATE, 2000); - two_signal_gen_position++; - if (two_signal_gen_position >= TRX_SAMPLERATE) - two_signal_gen_position = 0; - FPGA_Audio_Buffer_TX_I_tmp[i] = point; - FPGA_Audio_Buffer_TX_Q_tmp[i] = point; - } - //hilbert fir - // + 45 deg to Q data - arm_fir_f32(&FIR_TX_Hilbert_Q, FPGA_Audio_Buffer_TX_I_tmp, FPGA_Audio_Buffer_TX_I_tmp, AUDIO_BUFFER_HALF_SIZE); - // - 45 deg to I data - arm_fir_f32(&FIR_TX_Hilbert_I, FPGA_Audio_Buffer_TX_Q_tmp, FPGA_Audio_Buffer_TX_Q_tmp, AUDIO_BUFFER_HALF_SIZE); - } - - //FM tone generator - if (TRX_Tune && (mode == TRX_MODE_NFM || mode == TRX_MODE_WFM)) - { - static uint32_t tone_counter = 100; - tone_counter++; - if(tone_counter >= 400) - tone_counter = 0; - for (uint_fast16_t i = 0; i < AUDIO_BUFFER_HALF_SIZE; i++) - { - float32_t point = 0.0f; - if(tone_counter > 300) - point = generateSin(1.0f, two_signal_gen_position, TRX_SAMPLERATE, 3500); - else if(tone_counter > 200) - point = generateSin(1.0f, two_signal_gen_position, TRX_SAMPLERATE, 2000); - else if(tone_counter > 100) - point = generateSin(1.0f, two_signal_gen_position, TRX_SAMPLERATE, 1000); - - two_signal_gen_position++; - if (two_signal_gen_position >= TRX_SAMPLERATE) - two_signal_gen_position = 0; - - FPGA_Audio_Buffer_TX_I_tmp[i] = point; - FPGA_Audio_Buffer_TX_Q_tmp[i] = point; - } - ModulateFM(AUDIO_BUFFER_HALF_SIZE); - } - - if (!TRX_Tune) - { - //Copy and convert buffer - for (uint_fast16_t i = 0; i < AUDIO_BUFFER_HALF_SIZE; i++) - { - FPGA_Audio_Buffer_TX_I_tmp[i] = (float32_t)Processor_AudioBuffer_A[i * 2] / 2147483648.0f; - FPGA_Audio_Buffer_TX_Q_tmp[i] = (float32_t)Processor_AudioBuffer_A[i * 2 + 1] / 2147483648.0f; - } - - if (TRX.InputType_MIC) - { - //Mic Gain - arm_scale_f32(FPGA_Audio_Buffer_TX_I_tmp, TRX.MIC_GAIN, FPGA_Audio_Buffer_TX_I_tmp, AUDIO_BUFFER_HALF_SIZE); - arm_scale_f32(FPGA_Audio_Buffer_TX_Q_tmp, TRX.MIC_GAIN, FPGA_Audio_Buffer_TX_Q_tmp, AUDIO_BUFFER_HALF_SIZE); - //Mic Equalizer - if (mode != TRX_MODE_DIGI_L && mode != TRX_MODE_DIGI_U && mode != TRX_MODE_IQ) - doMIC_EQ(AUDIO_BUFFER_HALF_SIZE); - } - //USB Gain (24bit) - if (TRX.InputType_USB) - { - arm_scale_f32(FPGA_Audio_Buffer_TX_I_tmp, 10.0f, FPGA_Audio_Buffer_TX_I_tmp, AUDIO_BUFFER_HALF_SIZE); - arm_scale_f32(FPGA_Audio_Buffer_TX_Q_tmp, 10.0f, FPGA_Audio_Buffer_TX_Q_tmp, AUDIO_BUFFER_HALF_SIZE); - } - - //Process DC corrector filter - dc_filter(FPGA_Audio_Buffer_TX_I_tmp, AUDIO_BUFFER_HALF_SIZE, DC_FILTER_TX_I); - dc_filter(FPGA_Audio_Buffer_TX_Q_tmp, AUDIO_BUFFER_HALF_SIZE, DC_FILTER_TX_Q); - } - - if (mode != TRX_MODE_IQ && !TRX_Tune) - { - //IIR HPF - if (current_vfo->HPF_Filter_Width > 0) - arm_biquad_cascade_df2T_f32(&IIR_TX_HPF_I, FPGA_Audio_Buffer_TX_I_tmp, FPGA_Audio_Buffer_TX_I_tmp, AUDIO_BUFFER_HALF_SIZE); - //IIR LPF - if (current_vfo->LPF_Filter_Width > 0) - arm_biquad_cascade_df2T_f32(&IIR_TX_LPF_I, FPGA_Audio_Buffer_TX_I_tmp, FPGA_Audio_Buffer_TX_I_tmp, AUDIO_BUFFER_HALF_SIZE); - memcpy(&FPGA_Audio_Buffer_TX_Q_tmp[0], &FPGA_Audio_Buffer_TX_I_tmp[0], AUDIO_BUFFER_HALF_SIZE * 4); //double left and right channel - - switch (mode) - { - case TRX_MODE_CW_L: - case TRX_MODE_CW_U: - for (uint_fast16_t i = 0; i < AUDIO_BUFFER_HALF_SIZE; i++) - { - FPGA_Audio_Buffer_TX_I_tmp[i] = TRX_GenerateCWSignal(Processor_selected_RFpower_amplitude); - FPGA_Audio_Buffer_TX_Q_tmp[i] = 0.0f; - } - break; - case TRX_MODE_USB: - case TRX_MODE_DIGI_U: - //hilbert fir - // + 45 deg to Q data - arm_fir_f32(&FIR_TX_Hilbert_Q, FPGA_Audio_Buffer_TX_I_tmp, FPGA_Audio_Buffer_TX_I_tmp, AUDIO_BUFFER_HALF_SIZE); - // - 45 deg to I data - arm_fir_f32(&FIR_TX_Hilbert_I, FPGA_Audio_Buffer_TX_Q_tmp, FPGA_Audio_Buffer_TX_Q_tmp, AUDIO_BUFFER_HALF_SIZE); - break; - case TRX_MODE_LSB: - case TRX_MODE_DIGI_L: - //hilbert fir - // + 45 deg to I data - arm_fir_f32(&FIR_TX_Hilbert_I, FPGA_Audio_Buffer_TX_I_tmp, FPGA_Audio_Buffer_TX_I_tmp, AUDIO_BUFFER_HALF_SIZE); - // - 45 deg to Q data - arm_fir_f32(&FIR_TX_Hilbert_Q, FPGA_Audio_Buffer_TX_Q_tmp, FPGA_Audio_Buffer_TX_Q_tmp, AUDIO_BUFFER_HALF_SIZE); - break; - case TRX_MODE_AM: - // + 45 deg to I data - arm_fir_f32(&FIR_TX_Hilbert_I, FPGA_Audio_Buffer_TX_I_tmp, FPGA_Audio_Buffer_TX_I_tmp, AUDIO_BUFFER_HALF_SIZE); - // - 45 deg to Q data - arm_fir_f32(&FIR_TX_Hilbert_Q, FPGA_Audio_Buffer_TX_Q_tmp, FPGA_Audio_Buffer_TX_Q_tmp, AUDIO_BUFFER_HALF_SIZE); - for (size_t i = 0; i < AUDIO_BUFFER_HALF_SIZE; i++) - { - float32_t i_am = ((FPGA_Audio_Buffer_TX_I_tmp[i] - FPGA_Audio_Buffer_TX_Q_tmp[i]) + (Processor_selected_RFpower_amplitude)) / 2.0f; - float32_t q_am = ((FPGA_Audio_Buffer_TX_Q_tmp[i] - FPGA_Audio_Buffer_TX_I_tmp[i]) - (Processor_selected_RFpower_amplitude)) / 2.0f; - FPGA_Audio_Buffer_TX_I_tmp[i] = i_am; - FPGA_Audio_Buffer_TX_Q_tmp[i] = q_am; - } - break; - case TRX_MODE_NFM: - case TRX_MODE_WFM: - ModulateFM(AUDIO_BUFFER_HALF_SIZE); - break; - case TRX_MODE_LOOPBACK: - break; - default: - break; - } - } - - //// RF PowerControl (Audio Level Control) Compressor - // looking for a maximum in amplitude - float32_t ampl_max_i = 0.0f; - float32_t ampl_max_q = 0.0f; - float32_t ampl_min_i = 0.0f; - float32_t ampl_min_q = 0.0f; - uint32_t tmp_index; - arm_max_f32(FPGA_Audio_Buffer_TX_I_tmp, AUDIO_BUFFER_HALF_SIZE, &l_max_i, &tmp_index); - arm_max_f32(FPGA_Audio_Buffer_TX_Q_tmp, AUDIO_BUFFER_HALF_SIZE, &l_max_q, &tmp_index); - arm_min_f32(FPGA_Audio_Buffer_TX_I_tmp, AUDIO_BUFFER_HALF_SIZE, &l_min_i, &tmp_index); - arm_min_f32(FPGA_Audio_Buffer_TX_Q_tmp, AUDIO_BUFFER_HALF_SIZE, &l_min_q, &tmp_index); - float32_t Processor_TX_MAX_amplitude_IN = ampl_max_i; - if (ampl_max_q > Processor_TX_MAX_amplitude_IN) - Processor_TX_MAX_amplitude_IN = ampl_max_q; - if ((-ampl_min_i) > Processor_TX_MAX_amplitude_IN) - Processor_TX_MAX_amplitude_IN = -ampl_min_i; - if ((-ampl_min_q) > Processor_TX_MAX_amplitude_IN) - Processor_TX_MAX_amplitude_IN = -ampl_min_q; - - // calculate the target gain - if (Processor_TX_MAX_amplitude_IN > 0.0f) - { - ALC_need_gain_target = (Processor_selected_RFpower_amplitude * 0.99f) / Processor_TX_MAX_amplitude_IN; - // move the gain one step - if (fabsf(ALC_need_gain_target - ALC_need_gain) > 0.00001f) // hysteresis - { - if (ALC_need_gain_target > ALC_need_gain) - { - if (mode == TRX_MODE_DIGI_L || mode == TRX_MODE_DIGI_U) // FAST AGC - ALC_need_gain = (ALC_need_gain * (1.0f - (float32_t)TRX.TX_AGC_speed / 30.0f)) + (ALC_need_gain_target * ((float32_t)TRX.TX_AGC_speed / 30.0f)); - else // SLOW AGC - ALC_need_gain = (ALC_need_gain * (1.0f - (float32_t)TRX.TX_AGC_speed / 1000.0f)) + (ALC_need_gain_target * ((float32_t)TRX.TX_AGC_speed / 1000.0f)); - } - } - //just in case - if (ALC_need_gain < 0.0f) - ALC_need_gain = 0.0f; - // overload (clipping), sharply reduce the gain - if ((ALC_need_gain * Processor_TX_MAX_amplitude_IN) > (Processor_selected_RFpower_amplitude * 1.0f)) - { - ALC_need_gain = ALC_need_gain_target; - // sendToDebug_str ("MIC_CLIP"); - } - if (ALC_need_gain > TX_AGC_MAXGAIN) - ALC_need_gain = TX_AGC_MAXGAIN; - // noise threshold - if (Processor_TX_MAX_amplitude_IN < TX_AGC_NOISEGATE) - ALC_need_gain = 0.0f; - } - // disable gain for some types of mod - if ((ALC_need_gain > 1.0f) && (mode == TRX_MODE_LOOPBACK)) - ALC_need_gain = 1.0f; - if (mode == TRX_MODE_CW_L || mode == TRX_MODE_CW_U || mode == TRX_MODE_NFM || mode == TRX_MODE_WFM) - ALC_need_gain = 1.0f; - if (TRX_Tune) - ALC_need_gain = 1.0f; - - // apply gain - arm_scale_f32(FPGA_Audio_Buffer_TX_I_tmp, ALC_need_gain, FPGA_Audio_Buffer_TX_I_tmp, AUDIO_BUFFER_HALF_SIZE); - arm_scale_f32(FPGA_Audio_Buffer_TX_Q_tmp, ALC_need_gain, FPGA_Audio_Buffer_TX_Q_tmp, AUDIO_BUFFER_HALF_SIZE); - - Processor_TX_MAX_amplitude_OUT = Processor_TX_MAX_amplitude_IN * ALC_need_gain; - if (Processor_selected_RFpower_amplitude > 0.0f) - TRX_ALC = Processor_TX_MAX_amplitude_OUT / Processor_selected_RFpower_amplitude; - else - TRX_ALC = 0.0f; - //RF PowerControl (Audio Level Control) Compressor END - - //Send TX data to FFT - float32_t* FFTInput_I_current = FFT_buff_current ? (float32_t*)&FFTInput_I_B : (float32_t*)&FFTInput_I_A; - float32_t* FFTInput_Q_current = FFT_buff_current ? (float32_t*)&FFTInput_Q_B : (float32_t*)&FFTInput_Q_A; - for (uint_fast16_t i = 0; i < AUDIO_BUFFER_HALF_SIZE; i++) - { - FFTInput_I_current[FFT_buff_index] = FPGA_Audio_Buffer_TX_I_tmp[i]; - FFTInput_Q_current[FFT_buff_index] = FPGA_Audio_Buffer_TX_Q_tmp[i]; - FFT_buff_index++; - if (FFT_buff_index >= FFT_SIZE) - { - FFT_buff_index = 0; - FFT_new_buffer_ready = true; - FFT_buff_current = !FFT_buff_current; - } - } - - //Loopback mode - if (mode == TRX_MODE_LOOPBACK && !TRX_Tune) - { - //OUT Volume - float32_t volume_gain_tx = volume2rate((float32_t)TRX.Volume / 100.0f); - arm_scale_f32(FPGA_Audio_Buffer_TX_I_tmp, volume_gain_tx, FPGA_Audio_Buffer_TX_I_tmp, AUDIO_BUFFER_HALF_SIZE); - - for (uint_fast16_t i = 0; i < AUDIO_BUFFER_HALF_SIZE; i++) - { - arm_float_to_q31(&FPGA_Audio_Buffer_TX_I_tmp[i], &Processor_AudioBuffer_A[i * 2], 1); - Processor_AudioBuffer_A[i * 2] = convertToSPIBigEndian(Processor_AudioBuffer_A[i * 2]); //left channel - Processor_AudioBuffer_A[i * 2 + 1] = Processor_AudioBuffer_A[i * 2]; //right channel - } - - if (WM8731_DMA_state) //compleate - { - HAL_DMA_Start(&hdma_memtomem_dma2_stream1, (uint32_t)&Processor_AudioBuffer_A[0], (uint32_t)&CODEC_Audio_Buffer_RX[AUDIO_BUFFER_SIZE], AUDIO_BUFFER_SIZE); - HAL_DMA_PollForTransfer(&hdma_memtomem_dma2_stream1, HAL_DMA_FULL_TRANSFER, HAL_MAX_DELAY); - } - else //half - { - HAL_DMA_Start(&hdma_memtomem_dma2_stream2, (uint32_t)&Processor_AudioBuffer_A[0], (uint32_t)&CODEC_Audio_Buffer_RX[0], AUDIO_BUFFER_SIZE); - HAL_DMA_PollForTransfer(&hdma_memtomem_dma2_stream2, HAL_DMA_FULL_TRANSFER, HAL_MAX_DELAY); - } - } - else - { - //CW SelfHear - if (TRX.CW_SelfHear && (TRX.CW_KEYER || TRX_key_serial || TRX_key_dot_hard || TRX_key_dash_hard) && (mode == TRX_MODE_CW_L || mode == TRX_MODE_CW_U) && !TRX_Tune) - { - float32_t volume_gain_tx = volume2rate((float32_t)TRX.Volume / 100.0f); - float32_t amplitude = (db2rateV(TRX.AGC_GAIN_TARGET) * volume_gain_tx * CODEC_BITS_FULL_SCALE / 2.0f); - for (uint_fast16_t i = 0; i < AUDIO_BUFFER_HALF_SIZE; i++) - { - int32_t data = convertToSPIBigEndian((int32_t)(amplitude * ( FPGA_Audio_Buffer_TX_I_tmp[i] / Processor_selected_RFpower_amplitude) * arm_sin_f32(((float32_t)i / (float32_t)TRX_SAMPLERATE) * PI * 2.0f * (float32_t)TRX.CW_GENERATOR_SHIFT_HZ))); - if (WM8731_DMA_state) - { - CODEC_Audio_Buffer_RX[AUDIO_BUFFER_SIZE + i * 2] = data; - CODEC_Audio_Buffer_RX[AUDIO_BUFFER_SIZE + i * 2 + 1] = data; - } - else - { - CODEC_Audio_Buffer_RX[i * 2] = data; - CODEC_Audio_Buffer_RX[i * 2 + 1] = data; - } - } - } - else if (TRX.CW_SelfHear) - { - memset(CODEC_Audio_Buffer_RX, 0x00, sizeof CODEC_Audio_Buffer_RX); - } - // - if (FPGA_Audio_Buffer_State) //Send to FPGA DMA - { - HAL_DMA_Start(&hdma_memtomem_dma2_stream1, (uint32_t)&FPGA_Audio_Buffer_TX_I_tmp[0], (uint32_t)&FPGA_Audio_SendBuffer_I[AUDIO_BUFFER_HALF_SIZE], AUDIO_BUFFER_HALF_SIZE); - HAL_DMA_PollForTransfer(&hdma_memtomem_dma2_stream1, HAL_DMA_FULL_TRANSFER, HAL_MAX_DELAY); - HAL_DMA_Start(&hdma_memtomem_dma2_stream1, (uint32_t)&FPGA_Audio_Buffer_TX_Q_tmp[0], (uint32_t)&FPGA_Audio_SendBuffer_Q[AUDIO_BUFFER_HALF_SIZE], AUDIO_BUFFER_HALF_SIZE); - HAL_DMA_PollForTransfer(&hdma_memtomem_dma2_stream1, HAL_DMA_FULL_TRANSFER, HAL_MAX_DELAY); - } - else - { - HAL_DMA_Start(&hdma_memtomem_dma2_stream2, (uint32_t)&FPGA_Audio_Buffer_TX_I_tmp[0], (uint32_t)&FPGA_Audio_SendBuffer_I[0], AUDIO_BUFFER_HALF_SIZE); - HAL_DMA_PollForTransfer(&hdma_memtomem_dma2_stream2, HAL_DMA_FULL_TRANSFER, HAL_MAX_DELAY); - HAL_DMA_Start(&hdma_memtomem_dma2_stream2, (uint32_t)&FPGA_Audio_Buffer_TX_Q_tmp[0], (uint32_t)&FPGA_Audio_SendBuffer_Q[0], AUDIO_BUFFER_HALF_SIZE); - HAL_DMA_PollForTransfer(&hdma_memtomem_dma2_stream2, HAL_DMA_FULL_TRANSFER, HAL_MAX_DELAY); - } - } - - Processor_NeedTXBuffer = false; - Processor_NeedRXBuffer = false; - USB_AUDIO_need_rx_buffer = false; -} - -// Hilbert filter for phase shift of signals -static void doRX_HILBERT(uint16_t size) -{ - arm_fir_f32(&FIR_RX_Hilbert_I, FPGA_Audio_Buffer_RX_I_tmp, FPGA_Audio_Buffer_RX_I_tmp, size); - arm_fir_f32(&FIR_RX_Hilbert_Q, FPGA_Audio_Buffer_RX_Q_tmp, FPGA_Audio_Buffer_RX_Q_tmp, size); -} - -// Low-pass filter for I and Q -static void doRX_LPF_IQ(uint16_t size) -{ - if (CurrentVFO()->LPF_Filter_Width > 0) - { - arm_biquad_cascade_df2T_f32(&IIR_RX_LPF_I, FPGA_Audio_Buffer_RX_I_tmp, FPGA_Audio_Buffer_RX_I_tmp, size); - arm_biquad_cascade_df2T_f32(&IIR_RX_LPF_Q, FPGA_Audio_Buffer_RX_Q_tmp, FPGA_Audio_Buffer_RX_Q_tmp, size); - } -} - -// LPF filter for I -static void doRX_LPF_I(uint16_t size) -{ - if (CurrentVFO()->LPF_Filter_Width > 0) - { - arm_biquad_cascade_df2T_f32(&IIR_RX_LPF_I, FPGA_Audio_Buffer_RX_I_tmp, FPGA_Audio_Buffer_RX_I_tmp, size); - } -} - -// Gauss filter for I -static void doRX_GAUSS_I(uint16_t size) -{ - if (!TRX.CW_GaussFilter) - return; - if (CurrentVFO()->Mode == TRX_MODE_CW_L || CurrentVFO()->Mode == TRX_MODE_CW_U) - { - arm_biquad_cascade_df2T_f32(&IIR_RX_GAUSS, FPGA_Audio_Buffer_RX_I_tmp, FPGA_Audio_Buffer_RX_I_tmp, size); - } -} - -// HPF filter for I -static void doRX_HPF_I(uint16_t size) -{ - if (CurrentVFO()->HPF_Filter_Width > 0) - { - arm_biquad_cascade_df2T_f32(&IIR_RX_HPF_I, FPGA_Audio_Buffer_RX_I_tmp, FPGA_Audio_Buffer_RX_I_tmp, size); - } -} - -// notch filter -static void doRX_NOTCH(uint16_t size) -{ - if (CurrentVFO()->AutoNotchFilter) // automatic filter - { - for (uint32_t block = 0; block < (size / AUTO_NOTCH_BLOCK_SIZE); block++) - processAutoNotchReduction(FPGA_Audio_Buffer_RX_I_tmp + (block * AUTO_NOTCH_BLOCK_SIZE)); - } -} - -// RX Equalizer -static void doRX_EQ(uint16_t size) -{ - if (TRX.RX_EQ_LOW != 0) - arm_biquad_cascade_df2T_f32(&EQ_RX_LOW_FILTER, FPGA_Audio_Buffer_RX_I_tmp, FPGA_Audio_Buffer_RX_I_tmp, size); - if (TRX.RX_EQ_MID != 0) - arm_biquad_cascade_df2T_f32(&EQ_RX_MID_FILTER, FPGA_Audio_Buffer_RX_I_tmp, FPGA_Audio_Buffer_RX_I_tmp, size); - if (TRX.RX_EQ_HIG != 0) - arm_biquad_cascade_df2T_f32(&EQ_RX_HIG_FILTER, FPGA_Audio_Buffer_RX_I_tmp, FPGA_Audio_Buffer_RX_I_tmp, size); -} - -// Equalizer microphone -static void doMIC_EQ(uint16_t size) -{ - if (TRX.MIC_EQ_LOW != 0) - arm_biquad_cascade_df2T_f32(&EQ_MIC_LOW_FILTER, FPGA_Audio_Buffer_TX_I_tmp, FPGA_Audio_Buffer_TX_I_tmp, size); - if (TRX.MIC_EQ_MID != 0) - arm_biquad_cascade_df2T_f32(&EQ_MIC_MID_FILTER, FPGA_Audio_Buffer_TX_I_tmp, FPGA_Audio_Buffer_TX_I_tmp, size); - if (TRX.MIC_EQ_HIG != 0) - arm_biquad_cascade_df2T_f32(&EQ_MIC_HIG_FILTER, FPGA_Audio_Buffer_TX_I_tmp, FPGA_Audio_Buffer_TX_I_tmp, size); -} - -// automatic gain control -static void doRX_AGC(uint16_t size, uint_fast8_t mode) -{ - DoRxAGC(FPGA_Audio_Buffer_RX_I_tmp, size, mode); -} - -// s-meter -static void doRX_SMETER(uint16_t size) -{ - if(Processor_RX_Power_value != 0) - return; - // Prepare data to calculate s-meter - float32_t i = 0; - arm_rms_f32(FPGA_Audio_Buffer_RX_I_tmp, size, &i); - if(current_if_gain > 0) - i *= 1.0f / current_if_gain; - Processor_RX_Power_value = i; -} - -// copy I to Q channel -static void doRX_COPYCHANNEL(uint16_t size) -{ - // Double channel I-> Q - dma_memcpy32((uint32_t *)&FPGA_Audio_Buffer_RX_Q_tmp[0], (uint32_t *)&FPGA_Audio_Buffer_RX_I_tmp[0], size); -} - -// FM demodulator -static void DemodulateFM(uint16_t size) -{ - float32_t *lpf_prev = &DFM_RX_lpf_prev; - float32_t *hpf_prev_a = &DFM_RX_hpf_prev_a; - float32_t *hpf_prev_b = &DFM_RX_hpf_prev_b; - float32_t *i_prev = &DFM_RX_i_prev; - float32_t *q_prev = &DFM_RX_q_prev; - uint_fast8_t *fm_sql_count = &DFM_RX_fm_sql_count; - float32_t *FPGA_Audio_Buffer_I_tmp = &FPGA_Audio_Buffer_RX_I_tmp[0]; - float32_t *FPGA_Audio_Buffer_Q_tmp = &FPGA_Audio_Buffer_RX_Q_tmp[0]; - float32_t *fm_sql_avg = &DFM_RX_fm_sql_avg; - arm_biquad_cascade_df2T_instance_f32 *iir_filter_inst = &IIR_RX_Squelch_HPF; - bool *squelched = &DFM_RX_Squelched; - - float32_t angle, x, y, a, b; - static float32_t squelch_buf[FPGA_RX_IQ_BUFFER_HALF_SIZE]; - - for (uint_fast16_t i = 0; i < size; i++) - { - // first, calculate "x" and "y" for the arctan2, comparing the vectors of present data with previous data - y = (FPGA_Audio_Buffer_Q_tmp[i] * *i_prev) - (FPGA_Audio_Buffer_I_tmp[i] * *q_prev); - x = (FPGA_Audio_Buffer_I_tmp[i] * *i_prev) + (FPGA_Audio_Buffer_Q_tmp[i] * *q_prev); - angle = atan2f(y, x); - - // we now have our audio in "angle" - squelch_buf[i] = angle; // save audio in "d" buffer for squelch noise filtering/detection - done later - - a = *lpf_prev + (FM_RX_LPF_ALPHA * (angle - *lpf_prev)); // - *lpf_prev = a; // save "[n-1]" sample for next iteration - - *q_prev = FPGA_Audio_Buffer_Q_tmp[i]; // save "previous" value of each channel to allow detection of the change of angle in next go-around - *i_prev = FPGA_Audio_Buffer_I_tmp[i]; - - if ((!*squelched) || (!TRX.FM_SQL_threshold)) // high-pass audio only if we are un-squelched (to save processor time) - { - if (CurrentVFO()->Mode == TRX_MODE_WFM) - { - FPGA_Audio_Buffer_I_tmp[i] = (float32_t)(angle / PI) * 0.1f; //second way - } - else - { - b = FM_RX_HPF_ALPHA * (*hpf_prev_b + a - *hpf_prev_a); // do differentiation - *hpf_prev_a = a; // save "[n-1]" samples for next iteration - *hpf_prev_b = b; - FPGA_Audio_Buffer_I_tmp[i] = b * 0.1f; // save demodulated and filtered audio in main audio processing buffer - } - } - else if (*squelched) // were we squelched or tone NOT detected? - FPGA_Audio_Buffer_I_tmp[i] = 0; // do not filter receive audio - fill buffer with zeroes to mute it - } - - // *** Squelch Processing *** - arm_biquad_cascade_df2T_f32(iir_filter_inst, squelch_buf, squelch_buf, size); // Do IIR high-pass filter on audio so we may detect squelch noise energy - *fm_sql_avg = ((1.0f - FM_RX_SQL_SMOOTHING) * *fm_sql_avg) + (FM_RX_SQL_SMOOTHING * sqrtf(fabsf(squelch_buf[0]))); // IIR filter squelch energy magnitude: We need look at only one representative sample - - *fm_sql_count = *fm_sql_count + 1; // bump count that controls how often the squelch threshold is checked - if (*fm_sql_count >= FM_SQUELCH_PROC_DECIMATION) - *fm_sql_count = 0; // enforce the count limit - - // Determine if the (averaged) energy in "ads.fm_sql_avg" is above or below the squelch threshold - if (*fm_sql_count == 0) // do the squelch threshold calculation much less often than we are called to process this audio - { - if (*fm_sql_avg > 0.7f) // limit maximum noise value in averaging to keep it from going out into the weeds under no-signal conditions (higher = noisier) - *fm_sql_avg = 0.7f; - b = *fm_sql_avg * 10.0f; // scale noise amplitude to range of squelch setting - - // Now evaluate noise power with respect to squelch setting - if (!TRX.FM_SQL_threshold) // is squelch set to zero? - *squelched = false; // yes, the we are un-squelched - else if (*squelched) // are we squelched? - { - if (b <= (float)((10 - TRX.FM_SQL_threshold) - FM_SQUELCH_HYSTERESIS)) // yes - is average above threshold plus hysteresis? - *squelched = false; // yes, open the squelch - } - else // is the squelch open (e.g. passing audio)? - { - if ((10.0f - TRX.FM_SQL_threshold) > FM_SQUELCH_HYSTERESIS) // is setting higher than hysteresis? - { - if (b > (float)((10 - TRX.FM_SQL_threshold) + FM_SQUELCH_HYSTERESIS)) // yes - is average below threshold minus hysteresis? - *squelched = true; // yes, close the squelch - } - else // setting is lower than hysteresis so we can't use it! - { - if (b > (10.0f - (float)TRX.FM_SQL_threshold)) // yes - is average below threshold? - *squelched = true; // yes, close the squelch - } - } - } -} - -// FM modulator -static void ModulateFM(uint16_t size) -{ - static float32_t modulation = (float32_t)TRX_SAMPLERATE; - static float32_t hpf_prev_a = 0; - static float32_t hpf_prev_b = 0; - static float32_t sin_data = 0; - static float32_t fm_mod_accum = 0; - static float32_t modulation_index = 15000.0f; - if (CurrentVFO()->LPF_Filter_Width == 5000) - modulation_index = 4000.0f; - if (CurrentVFO()->LPF_Filter_Width == 6000) - modulation_index = 6000.0f; - if (CurrentVFO()->LPF_Filter_Width == 7000) - modulation_index = 8000.0f; - if (CurrentVFO()->LPF_Filter_Width == 8000) - modulation_index = 11000.0f; - if (CurrentVFO()->LPF_Filter_Width == 9000) - modulation_index = 13000.0f; - if (CurrentVFO()->LPF_Filter_Width == 10000) - modulation_index = 15000.0f; - if (CurrentVFO()->LPF_Filter_Width == 15000) - modulation_index = 30000.0f; - if (CurrentVFO()->LPF_Filter_Width == 20000) - modulation_index = 40000.0f; - if (CurrentVFO()->LPF_Filter_Width == 0) - modulation_index = 45000.0f; - - // Do differentiating high-pass filter to provide 6dB/octave pre-emphasis - which also removes any DC component! - float32_t ampl = (Processor_selected_RFpower_amplitude / 100.0f * TUNE_POWER); - for (uint_fast16_t i = 0; i < size; i++) - { - hpf_prev_b = FM_TX_HPF_ALPHA * (hpf_prev_b +FPGA_Audio_Buffer_TX_I_tmp[i] - hpf_prev_a); // do differentiation - hpf_prev_a = FPGA_Audio_Buffer_TX_I_tmp[i]; // save "[n-1] samples for next iteration - fm_mod_accum = (1.0f - 0.999f) * fm_mod_accum + 0.999f * hpf_prev_b; // save differentiated data in audio buffer // change frequency using scaled audio - while(fm_mod_accum > modulation) fm_mod_accum -= modulation; // limit range - while(fm_mod_accum < -modulation) fm_mod_accum += modulation; // limit range - sin_data = ((fm_mod_accum * modulation_index) / modulation) * PI; - FPGA_Audio_Buffer_TX_I_tmp[i] = ampl * arm_sin_f32(sin_data); - FPGA_Audio_Buffer_TX_Q_tmp[i] = ampl * arm_cos_f32(sin_data); - } -} - -// Apply IF Gain IF Gain -static void doRX_IFGain(uint16_t size) -{ - float32_t if_gain = db2rateV(TRX.IF_Gain); - - //apply gain - arm_scale_f32(FPGA_Audio_Buffer_RX_I_tmp, if_gain, FPGA_Audio_Buffer_RX_I_tmp, size); - arm_scale_f32(FPGA_Audio_Buffer_RX_Q_tmp, if_gain, FPGA_Audio_Buffer_RX_Q_tmp, size); - current_if_gain = if_gain; -} diff --git a/Src/audio_processor.h b/Src/audio_processor.h deleted file mode 100644 index 28265d9..0000000 --- a/Src/audio_processor.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef AUDIO_PROCESSOR_h -#define AUDIO_PROCESSOR_h - -#include "stm32f4xx_hal.h" -#include -#include -#include -#include "functions.h" -#include "settings.h" - -#define AUDIO_BUFFER_SIZE (192 * 2) // the size of the buffer for working with sound 48kHz -#define AUDIO_BUFFER_HALF_SIZE (AUDIO_BUFFER_SIZE / 2) // buffer size for working with sound 48kHz -#define FPGA_TX_IQ_BUFFER_SIZE AUDIO_BUFFER_SIZE // size of TX data buffer for FPGA -#define FPGA_TX_IQ_BUFFER_HALF_SIZE (FPGA_TX_IQ_BUFFER_SIZE / 2) // half the size of the TX data buffer for FPGA -#define FPGA_RX_IQ_BUFFER_SIZE (FPGA_TX_IQ_BUFFER_SIZE) // size of the RX data buffer from the PGA -#define FPGA_RX_IQ_BUFFER_HALF_SIZE (FPGA_RX_IQ_BUFFER_SIZE / 2) // half the size of the RX data buffer from the PGA - -#define FM_RX_LPF_ALPHA 0.05f // For NFM demodulator: "Alpha" (low-pass) factor to result in -6dB "knee" at approx. 270 Hz 0.05f -#define FM_RX_HPF_ALPHA 0.96f // For NFM demodulator: "Alpha" (high-pass) factor to result in -6dB "knee" at approx. 180 Hz 0.96f -#define FM_TX_HPF_ALPHA 0.95f // For FM modulator: "Alpha" (high-pass) factor to pre-emphasis -#define FM_SQUELCH_HYSTERESIS 0.3f // Hysteresis for FM squelch -#define FM_SQUELCH_PROC_DECIMATION 50 // Number of times we go through the FM demod algorithm before we do a squelch calculation -#define FM_RX_SQL_SMOOTHING 0.005f // Smoothing factor for IIR squelch noise averaging -#define AUDIO_RX_NB_DELAY_BUFFER_ITEMS 32 // NoiseBlanker buffer size -#define AUDIO_RX_NB_DELAY_BUFFER_SIZE (AUDIO_RX_NB_DELAY_BUFFER_ITEMS * 2) -#define AUDIO_MAX_REVERBER_TAPS 10 - -// Public variables -extern volatile uint32_t AUDIOPROC_samples; // audio samples processed in the processor -extern int32_t Processor_AudioBuffer_A[AUDIO_BUFFER_SIZE]; // buffer A of the audio processor -extern int32_t Processor_AudioBuffer_B[AUDIO_BUFFER_SIZE]; // buffer B of the audio processor -extern volatile uint_fast8_t Processor_AudioBuffer_ReadyBuffer; // which buffer is currently in use, A or B -extern volatile bool Processor_NeedRXBuffer; // codec needs data from processor for RX -extern volatile bool Processor_NeedTXBuffer; // codec needs data from processor for TX -extern float32_t FPGA_Audio_Buffer_RX_Q_tmp[FPGA_RX_IQ_BUFFER_HALF_SIZE]; // copy of the working part of the FPGA buffers for processing -extern float32_t FPGA_Audio_Buffer_RX_I_tmp[FPGA_RX_IQ_BUFFER_HALF_SIZE]; -extern float32_t FPGA_Audio_Buffer_TX_Q_tmp[FPGA_TX_IQ_BUFFER_HALF_SIZE]; -extern float32_t FPGA_Audio_Buffer_TX_I_tmp[FPGA_TX_IQ_BUFFER_HALF_SIZE]; -extern volatile float32_t Processor_TX_MAX_amplitude_OUT; // TX uplift after ALC -extern volatile float32_t Processor_RX_Power_value; // RX signal magnitude -extern volatile float32_t Processor_selected_RFpower_amplitude; // target TX signal amplitude -extern bool NeedReinitReverber; - -// Public methods -extern void processRxAudio(void); // start audio processor for RX -extern void processTxAudio(void); // start audio processor for TX -extern void initAudioProcessor(void); // initialize audio processor - -#endif diff --git a/Src/auto_notch.c b/Src/auto_notch.c deleted file mode 100644 index 8ef95a5..0000000 --- a/Src/auto_notch.c +++ /dev/null @@ -1,75 +0,0 @@ -#include "auto_notch.h" -#include "trx_manager.h" - -// Private variables -static arm_lms_norm_instance_f32 lms2_Norm_instance; -static float32_t lms2_stateF32[AUTO_NOTCH_TAPS + AUTO_NOTCH_BLOCK_SIZE - 1]; -static float32_t lms2_normCoeff_f32[AUTO_NOTCH_TAPS]; -static float32_t lms2_reference[AUTO_NOTCH_REFERENCE_SIZE]; -static float32_t lms2_errsig2[AUTO_NOTCH_BLOCK_SIZE]; -static uint_fast16_t reference_index_old; -static uint_fast16_t reference_index_new; - -// initialize the automatic notch filter -void InitAutoNotchReduction(void) -{ - memset(&lms2_stateF32, 0x00, sizeof(lms2_stateF32)); - memset(&lms2_normCoeff_f32, 0x00, sizeof(lms2_normCoeff_f32)); - memset(&lms2_reference, 0x00, sizeof(lms2_reference)); - memset(&lms2_errsig2, 0x00, sizeof(lms2_errsig2)); - reference_index_old = 0; - reference_index_new = 0; - arm_lms_norm_init_f32(&lms2_Norm_instance, AUTO_NOTCH_TAPS, lms2_normCoeff_f32, lms2_stateF32, AUTO_NOTCH_STEP, AUTO_NOTCH_BLOCK_SIZE); -} - -// start automatic notch filter -void processAutoNotchReduction(float32_t *buffer) -{ - //overflow protect - static uint32_t temporary_stop = 0; - if(temporary_stop > 0) - { - temporary_stop--; - return; - } - memcpy(&lms2_reference[reference_index_new], buffer, sizeof(float32_t) * AUTO_NOTCH_BLOCK_SIZE); // save the data to the reference buffer - arm_lms_norm_f32(&lms2_Norm_instance, buffer, &lms2_reference[reference_index_old], lms2_errsig2, buffer, AUTO_NOTCH_BLOCK_SIZE); // start LMS filter - - //overflow protect - float32_t minValOut = 0; - float32_t maxValOut = 0; - uint32_t index = 0; - arm_min_f32(buffer, AUTO_NOTCH_BLOCK_SIZE, &minValOut, &index); - arm_max_no_idx_f32(buffer, AUTO_NOTCH_BLOCK_SIZE, &maxValOut); - if(isnanf(minValOut) || isinff(minValOut) || isnanf(maxValOut) || isinff(maxValOut)) - { - if(AUTO_NOTCH_DEBUG) - { - sendToDebug_str("auto notch err "); - sendToDebug_float32(minValOut,true); - sendToDebug_str(" "); - sendToDebug_float32(maxValOut,false); - } - InitAutoNotchReduction(); - memset(buffer, 0x00, sizeof(float32_t) * AUTO_NOTCH_BLOCK_SIZE); - temporary_stop = 500; - } - arm_max_no_idx_f32(lms2_Norm_instance.pCoeffs, AUTO_NOTCH_TAPS, &maxValOut); - if(maxValOut > 1.0f) - { - if(AUTO_NOTCH_DEBUG) - { - sendToDebug_strln("auto notch reset"); - sendToDebug_float32(maxValOut,false); - } - InitAutoNotchReduction(); - temporary_stop = 500; - } - - reference_index_old += AUTO_NOTCH_BLOCK_SIZE; // move along the reference buffer - if (reference_index_old >= AUTO_NOTCH_REFERENCE_SIZE) - reference_index_old = 0; - reference_index_new = reference_index_old + AUTO_NOTCH_BLOCK_SIZE; - if (reference_index_new >= AUTO_NOTCH_REFERENCE_SIZE) - reference_index_new = 0; -} diff --git a/Src/auto_notch.h b/Src/auto_notch.h deleted file mode 100644 index 794416d..0000000 --- a/Src/auto_notch.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef AUTO_NOTCH_h -#define AUTO_NOTCH_h - -#include "stm32f4xx_hal.h" -#include -#include -#include -#include "audio_processor.h" - -#define AUTO_NOTCH_BLOCK_SIZE (AUDIO_BUFFER_HALF_SIZE / 3) // block size for processing -#define AUTO_NOTCH_TAPS 32 // filter order -#define AUTO_NOTCH_REFERENCE_SIZE (AUTO_NOTCH_BLOCK_SIZE * 2) // size of the reference buffer -#define AUTO_NOTCH_STEP 0.0005f // LMS algorithm step -#define AUTO_NOTCH_DEBUG false - -// Public methods -extern void InitAutoNotchReduction(void); // initialize the automatic notch filter -extern void processAutoNotchReduction(float32_t *buffer); // start automatic notch filter - -#endif diff --git a/Src/bands.c b/Src/bands.c deleted file mode 100644 index e73fd5a..0000000 --- a/Src/bands.c +++ /dev/null @@ -1,223 +0,0 @@ -#include "bands.h" -#include "functions.h" -#include -#include "settings.h" - -const BAND_MAP BANDS[BANDS_COUNT] = - { - //0-2200METERS - { - .name = "2200m", - .selectable = false, - .startFreq = 135700, - .endFreq = 137800, - .regions = (const REGION_MAP[]){ - {.startFreq = 135700, .endFreq = 137800, .mode = TRX_MODE_CW_L}, - }, - .regionsCount = 1, - }, - //1-160METERS - { - .name = "160m", - .selectable = true, - .startFreq = 1810000, - .endFreq = 2000000, - .regions = (const REGION_MAP[]){ - {.startFreq = 1810000, .endFreq = 1838000, .mode = TRX_MODE_CW_L}, - {.startFreq = 1838000, .endFreq = 1843000, .mode = TRX_MODE_DIGI_U}, - {.startFreq = 1843000, .endFreq = 2000000, .mode = TRX_MODE_LSB}, - }, - .regionsCount = 3, - }, - - //2-80METERS - { - .name = "80m", - .selectable = true, - .startFreq = 3500000, - .endFreq = 3800000, - .regions = (const REGION_MAP[]){ - {.startFreq = 3500000, .endFreq = 3570000, .mode = TRX_MODE_CW_L}, - {.startFreq = 3570000, .endFreq = 3600000, .mode = TRX_MODE_DIGI_U}, - {.startFreq = 3600000, .endFreq = 3800000, .mode = TRX_MODE_LSB}, - }, - .regionsCount = 3, - }, - //3-60METERS - { - .name = "60m", - .selectable = false, - .startFreq = 5330500, - .endFreq = 5403500, - .regions = (const REGION_MAP[]){ - {.startFreq = 5330500, .endFreq = 5403500, .mode = TRX_MODE_USB}, - }, - .regionsCount = 1, - }, - //4-40METERS - { - .name = "40m", - .selectable = true, - .startFreq = 7000000, - .endFreq = 7200000, - .regions = (const REGION_MAP[]){ - {.startFreq = 7000000, .endFreq = 7040000, .mode = TRX_MODE_CW_L}, - {.startFreq = 7040000, .endFreq = 7060000, .mode = TRX_MODE_DIGI_U}, - {.startFreq = 7060000, .endFreq = 7074000, .mode = TRX_MODE_LSB}, - {.startFreq = 7074000, .endFreq = 7080000, .mode = TRX_MODE_DIGI_U}, - {.startFreq = 7080000, .endFreq = 7200000, .mode = TRX_MODE_LSB}, - }, - .regionsCount = 5, - }, - //5-30METERS - { - .name = "30m", - .selectable = true, - .startFreq = 10100000, - .endFreq = 10150000, - .regions = (const REGION_MAP[]){ - {.startFreq = 10100000, .endFreq = 10130000, .mode = TRX_MODE_CW_U}, - {.startFreq = 10130000, .endFreq = 10150000, .mode = TRX_MODE_DIGI_U}, - }, - .regionsCount = 2, - }, - //6-20METERS - { - .name = "20m", - .selectable = true, - .startFreq = 14000000, - .endFreq = 14350000, - .regions = (const REGION_MAP[]){ - {.startFreq = 14000000, .endFreq = 14070000, .mode = TRX_MODE_CW_U}, - {.startFreq = 14070000, .endFreq = 14112000, .mode = TRX_MODE_DIGI_U}, - {.startFreq = 14112000, .endFreq = 14350000, .mode = TRX_MODE_USB}, - }, - .regionsCount = 3, - }, - //7-17METERS - { - .name = "17m", - .selectable = true, - .startFreq = 18068000, - .endFreq = 18168000, - .regions = (const REGION_MAP[]){ - {.startFreq = 18068000, .endFreq = 18095000, .mode = TRX_MODE_CW_U}, - {.startFreq = 18095000, .endFreq = 18120000, .mode = TRX_MODE_DIGI_U}, - {.startFreq = 18120000, .endFreq = 18168000, .mode = TRX_MODE_USB}, - }, - .regionsCount = 3, - }, - //8-15METERS - { - .name = "15m", - .selectable = true, - .startFreq = 21000000, - .endFreq = 21450000, - .regions = (const REGION_MAP[]){ - {.startFreq = 21000000, .endFreq = 21070000, .mode = TRX_MODE_CW_U}, - {.startFreq = 21070000, .endFreq = 21149000, .mode = TRX_MODE_DIGI_U}, - {.startFreq = 21149000, .endFreq = 21450000, .mode = TRX_MODE_USB}, - }, - .regionsCount = 4, - }, - //9-12METERS - { - .name = "12m", - .selectable = true, - .startFreq = 24890000, - .endFreq = 24990000, - .regions = (const REGION_MAP[]){ - {.startFreq = 24890000, .endFreq = 24915000, .mode = TRX_MODE_CW_U}, - {.startFreq = 24915000, .endFreq = 24940000, .mode = TRX_MODE_DIGI_U}, - {.startFreq = 24940000, .endFreq = 24990000, .mode = TRX_MODE_USB}, - }, - .regionsCount = 4, - }, - //10-10METERS - { - .name = "10m", - .selectable = true, - .startFreq = 28000000, - .endFreq = 29700000, - .regions = (const REGION_MAP[]){ - {.startFreq = 28000000, .endFreq = 28070000, .mode = TRX_MODE_CW_U}, - {.startFreq = 28070000, .endFreq = 28190000, .mode = TRX_MODE_DIGI_U}, - {.startFreq = 28190000, .endFreq = 28300000, .mode = TRX_MODE_CW_U}, - {.startFreq = 28300000, .endFreq = 28320000, .mode = TRX_MODE_DIGI_U}, - {.startFreq = 28320000, .endFreq = 29100000, .mode = TRX_MODE_USB}, - {.startFreq = 29100000, .endFreq = 29200000, .mode = TRX_MODE_NFM}, - {.startFreq = 29200000, .endFreq = 29300000, .mode = TRX_MODE_DIGI_U}, - {.startFreq = 29300000, .endFreq = 29520000, .mode = TRX_MODE_USB}, - {.startFreq = 29520000, .endFreq = 29700000, .mode = TRX_MODE_NFM}, - }, - .regionsCount = 9, - }, - //11-6METERS - { - .name = "6m", - .selectable = true, - .startFreq = 50000000, - .endFreq = 54000000, - .regions = (const REGION_MAP[]){ - {.startFreq = 50000000, .endFreq = 50100000, .mode = TRX_MODE_CW_U}, - {.startFreq = 50100000, .endFreq = 50300000, .mode = TRX_MODE_USB}, - {.startFreq = 50300000, .endFreq = 50350000, .mode = TRX_MODE_DIGI_U}, - {.startFreq = 50350000, .endFreq = 50600000, .mode = TRX_MODE_USB}, - {.startFreq = 50600000, .endFreq = 51000000, .mode = TRX_MODE_DIGI_U}, - {.startFreq = 51000000, .endFreq = 51100000, .mode = TRX_MODE_USB}, - {.startFreq = 51100000, .endFreq = 54000000, .mode = TRX_MODE_NFM}, - }, - .regionsCount = 7, - }, -}; - -// band number from frequency -int8_t getBandFromFreq(uint32_t freq, bool nearest) -{ - for (int8_t b = 0; b < BANDS_COUNT; b++) - if (BANDS[b].startFreq <= freq && freq <= BANDS[b].endFreq) - return b; - - if (nearest) - { - int8_t near_band = 0; - int32_t near_diff = 999999999; - for (int8_t b = 0; b < BANDS_COUNT; b++) - { - if (abs((int32_t)BANDS[b].startFreq - (int32_t)freq) < near_diff) - { - near_diff = abs((int32_t)BANDS[b].startFreq - (int32_t)freq); - near_band = b; - } - if (abs((int32_t)BANDS[b].endFreq - (int32_t)freq) < near_diff) - { - near_diff = abs((int32_t)BANDS[b].endFreq - (int32_t)freq); - near_band = b; - } - } - return near_band; - } - - return -1; -} - -// mod from frequency -uint_fast8_t getModeFromFreq(uint32_t freq) -{ - uint_fast8_t ret = 0; - ret = CurrentVFO()->Mode; - - for (uint_fast16_t b = 0; b < BANDS_COUNT; b++) - { - if (BANDS[b].startFreq <= freq && freq <= BANDS[b].endFreq) - for (uint_fast16_t r = 0; r < BANDS[b].regionsCount; r++) - { - if (BANDS[b].regions[r].startFreq <= freq && freq < BANDS[b].regions[r].endFreq) - { - ret = BANDS[b].regions[r].mode; - return ret; - } - } - } - return ret; -} diff --git a/Src/bands.h b/Src/bands.h deleted file mode 100644 index 983f603..0000000 --- a/Src/bands.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef BANDS_H -#define BANDS_H - -#include "stm32f4xx_hal.h" -#include -#include - -#define BANDS_COUNT 12 // number of bands in the collection - -typedef struct // description of the region in the band -{ - const uint32_t startFreq; - const uint32_t endFreq; - const uint_fast8_t mode; -} REGION_MAP; - -typedef struct // description of the band -{ - const char *name; - const bool selectable; - const uint32_t startFreq; - const uint32_t endFreq; - const REGION_MAP *regions; - const uint_fast8_t regionsCount; -} BAND_MAP; - -// Public variables -extern const BAND_MAP BANDS[BANDS_COUNT]; - -// Public methods -extern uint_fast8_t getModeFromFreq(uint32_t freq); // mod from frequency -extern int8_t getBandFromFreq(uint32_t freq, bool nearest); // band number from frequency -#endif diff --git a/Src/bootloader.c b/Src/bootloader.c deleted file mode 100644 index ac2f7a9..0000000 --- a/Src/bootloader.c +++ /dev/null @@ -1,40 +0,0 @@ -#include "bootloader.h" -#include "usb_device.h" -#include "main.h" -#include "lcd.h" -#include "functions.h" - -// switch to DFU-mode buloder -void JumpToBootloader(void) -{ - uint32_t i = 0; - void (*SysMemBootJump)(void); - - volatile uint32_t BootAddr = 0x1FF09800; - LCD_busy = true; - TRX_Inited = false; - LCD_showError("Flash DFU mode", false); - MX_USB_DevDisconnect(); - HAL_Delay(1000); - //prepare cpu - HAL_MPU_Disable(); - HAL_SuspendTick(); - __disable_irq(); //Disable all interrupts - SysTick->CTRL = 0; //Disable Systick timer - SysTick->VAL = 0; - SysTick->LOAD = 0; - HAL_RCC_DeInit(); //Set the clock to the default state - for (i = 0; i < 5; i++) //Clear Interrupt Enable Register & Interrupt Pending Register - { - NVIC->ICER[i] = 0xFFFFFFFF; - NVIC->ICPR[i] = 0xFFFFFFFF; - } - __enable_irq(); //Re-enable all interrupts - //go to bootloader - SysMemBootJump = (void (*)(void))(*((uint32_t *)((BootAddr + 4)))); //-V566 - __set_MSP(*(uint32_t *)BootAddr); //-V566 - SysMemBootJump(); - while (true) - { - } -} diff --git a/Src/bootloader.h b/Src/bootloader.h deleted file mode 100644 index cbf3486..0000000 --- a/Src/bootloader.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef BOOTLOADER_H -#define BOOTLOADER_H - -#include "stm32f4xx.h" -#include "stm32f4xx_hal_conf.h" -#include "stm32f4xx_hal_rcc.h" -#include "stm32f4xx_hal_gpio.h" - -//Public methods -extern void JumpToBootloader(void); // switch to DFU-mode buloder - -#endif diff --git a/Src/color_themes.h b/Src/color_themes.h deleted file mode 100644 index f4d6fd0..0000000 --- a/Src/color_themes.h +++ /dev/null @@ -1,178 +0,0 @@ -#ifndef LCD_COLOR_THEMES_h -#define LCD_COLOR_THEMES_h - -#include "lcd_driver.h" - -typedef const struct -{ - const uint16_t BACKGROUND; - const uint16_t FOREGROUND; - const uint16_t BUTTON_TEXT; - const uint16_t BUTTON_INACTIVE_TEXT; - const uint16_t BUTTON_BACKGROUND; - const uint16_t FREQ_MHZ; - const uint16_t FREQ_KHZ; - const uint16_t FREQ_HZ; - const uint16_t STATUS_VFO; - const uint16_t STATUS_VFO_BG; - const uint16_t STATUS_BAR_LEFT; - const uint16_t STATUS_BAR_RIGHT; - const uint16_t STATUS_BAR_LABELS; - const uint16_t STATUS_RX; - const uint16_t STATUS_TX; - const uint16_t STATUS_LABELS_BW; - const uint16_t STATUS_LABELS_TX; - const uint16_t STATUS_LABEL_S_VAL; - const uint16_t STATUS_LABEL_DBM; - const uint16_t STATUS_LABEL_BW; - const uint16_t STATUS_LABEL_RIT; - const uint16_t STATUS_LABEL_VLT; - const uint16_t STATUS_LABEL_THERM; - const uint16_t STATUS_LABEL_NOTCH; - const uint16_t STATUS_SMETER; - const uint16_t STATUS_SMETER_STRIPE; - const uint16_t STATUS_SMETER_PEAK; - const uint16_t STATUS_MODE; - const uint16_t STATUS_ERR; - const uint16_t BANDMAP_CW; - const uint16_t BANDMAP_SSB; - const uint16_t BANDMAP_DIGI; - const uint16_t BANDMAP_AM; - const uint16_t BANDMAP_FM; - const uint16_t GREETINGS; - const uint16_t TOOLTIP_FORE; - const uint16_t TOOLTIP_BACK; - const uint16_t TOOLTIP_BORD; - const uint16_t CLOCK; - const uint16_t FFT_GRADIENT_START_R; - const uint16_t FFT_GRADIENT_START_G; - const uint16_t FFT_GRADIENT_START_B; - const uint16_t FFT_GRADIENT_END_R; - const uint16_t FFT_GRADIENT_END_G; - const uint16_t FFT_GRADIENT_END_B; - const uint16_t BOTTOM_BUTTONS_COLOR; - const bool WTF_BG_WHITE; - const uint16_t BW_TRAPEZ_BORDER; - const uint16_t BW_TRAPEZ_STRIPE; - const uint16_t BW_TRAPEZ_FILL; -} STRUCT_COLOR_THEME; - -static const STRUCT_COLOR_THEME COLOR_THEMES[2] = { - //0 - black - { - //3'2 inch - .BACKGROUND = COLOR_BLACK, - .FOREGROUND = COLOR_WHITE, - .BUTTON_TEXT = rgb888torgb565(32, 191, 17), - .BUTTON_INACTIVE_TEXT = rgb888torgb565(130, 130, 130), - .BUTTON_BACKGROUND = rgb888torgb565(50, 50, 50), - .FREQ_MHZ = COLOR_WHITE, - .FREQ_KHZ = COLOR_WHITE, - .FREQ_HZ = rgb888torgb565(150, 150, 150), - .STATUS_VFO = COLOR_BLACK, - .STATUS_VFO_BG = COLOR_WHITE, - .STATUS_BAR_LEFT = rgb888torgb565(100, 100, 255), - .STATUS_BAR_RIGHT = rgb888torgb565(255, 100, 100), - .STATUS_BAR_LABELS = rgb888torgb565(32, 171, 17), - .STATUS_RX = COLOR_WHITE, - .STATUS_TX = COLOR_RED, - .STATUS_LABELS_BW = COLOR_WHITE, - .STATUS_LABELS_TX = rgb888torgb565(32, 171, 17), - .STATUS_LABEL_S_VAL = rgb888torgb565(249, 205, 46), - .STATUS_LABEL_DBM = rgb888torgb565(32, 191, 17), - .STATUS_LABEL_BW = rgb888torgb565(0, 200, 255), - .STATUS_LABEL_RIT = COLOR_WHITE, - .STATUS_LABEL_VLT = rgb888torgb565(249, 205, 46), - .STATUS_LABEL_THERM = rgb888torgb565(249, 205, 46), - .STATUS_LABEL_NOTCH = rgb888torgb565(0, 200, 255), - .STATUS_SMETER = rgb888torgb565(249, 205, 46), - .STATUS_SMETER_STRIPE = COLOR_RED, - .STATUS_SMETER_PEAK = rgb888torgb565(249, 151, 46), - .STATUS_MODE = rgb888torgb565(249, 205, 46), - .STATUS_ERR = COLOR_RED, - .BANDMAP_CW = rgb888torgb565(50, 50, 255), - .BANDMAP_SSB = rgb888torgb565(50, 237, 255), - .BANDMAP_DIGI = rgb888torgb565(255, 50, 50), - .BANDMAP_AM = rgb888torgb565(219, 255, 50), - .BANDMAP_FM = rgb888torgb565(255, 50, 208), - .GREETINGS = rgb888torgb565(0, 92, 86), - .TOOLTIP_FORE = COLOR_WHITE, - .TOOLTIP_BACK = COLOR_BLACK, - .TOOLTIP_BORD = COLOR_WHITE, - .CLOCK = COLOR_WHITE, - .FFT_GRADIENT_START_R = 0, - .FFT_GRADIENT_START_G = 11, - .FFT_GRADIENT_START_B = 40, - .FFT_GRADIENT_END_R = 46, - .FFT_GRADIENT_END_G = 77, - .FFT_GRADIENT_END_B = 158, - .WTF_BG_WHITE = false, - .BOTTOM_BUTTONS_COLOR = rgb888torgb565(249, 205, 46), - .BW_TRAPEZ_BORDER = rgb888torgb565(120, 120, 120), - .BW_TRAPEZ_STRIPE = rgb888torgb565(0, 200, 255), - .BW_TRAPEZ_FILL = rgb888torgb565(140, 140, 140), - }, - //1 - white - { - //3'2 inch - .BACKGROUND = COLOR_WHITE, - .FOREGROUND = COLOR_BLACK, - .BUTTON_TEXT = rgb888torgb565(150, 130, 50), - .BUTTON_INACTIVE_TEXT = rgb888torgb565(220, 220, 220), - .BUTTON_BACKGROUND = rgb888torgb565(240, 240, 240), - .FREQ_MHZ = COLOR_BLACK, - .FREQ_KHZ = COLOR_BLACK, - .FREQ_HZ = rgb888torgb565(130, 130, 130), - .STATUS_VFO = COLOR_WHITE, - .STATUS_VFO_BG = rgb888torgb565(150, 150, 150), - .STATUS_BAR_LEFT = rgb888torgb565(100, 100, 255), - .STATUS_BAR_RIGHT = rgb888torgb565(255, 100, 100), - .STATUS_BAR_LABELS = rgb888torgb565(32, 171, 17), - .STATUS_RX = COLOR_BLACK, - .STATUS_TX = COLOR_RED, - .STATUS_LABELS_BW = COLOR_BLACK, - .STATUS_LABELS_TX = rgb888torgb565(32, 171, 17), - .STATUS_LABEL_S_VAL = rgb888torgb565(150, 130, 50), - .STATUS_LABEL_DBM = rgb888torgb565(32, 191, 17), - .STATUS_LABEL_BW = rgb888torgb565(0, 100, 255), - .STATUS_LABEL_RIT = COLOR_BLACK, - .STATUS_LABEL_VLT = rgb888torgb565(249, 205, 46), - .STATUS_LABEL_THERM = rgb888torgb565(249, 205, 46), - .STATUS_LABEL_NOTCH = rgb888torgb565(0, 100, 255), - .STATUS_SMETER = rgb888torgb565(255, 238, 175), - .STATUS_SMETER_STRIPE = COLOR_RED, - .STATUS_SMETER_PEAK = rgb888torgb565(249, 151, 46), - .STATUS_MODE = rgb888torgb565(150, 130, 50), - .STATUS_ERR = COLOR_RED, - .BANDMAP_CW = rgb888torgb565(100, 100, 250), - .BANDMAP_SSB = rgb888torgb565(60, 225, 241), - .BANDMAP_DIGI = rgb888torgb565(255, 50, 50), - .BANDMAP_AM = rgb888torgb565(184, 215, 42), - .BANDMAP_FM = rgb888torgb565(192, 0, 148), - .GREETINGS = rgb888torgb565(0, 92, 86), - .TOOLTIP_FORE = COLOR_BLACK, - .TOOLTIP_BACK = COLOR_WHITE, - .TOOLTIP_BORD = COLOR_BLACK, - .CLOCK = COLOR_BLACK, - .FFT_GRADIENT_START_R = 220, - .FFT_GRADIENT_START_G = 220, - .FFT_GRADIENT_START_B = 250, - .FFT_GRADIENT_END_R = 255, - .FFT_GRADIENT_END_G = 255, - .FFT_GRADIENT_END_B = 255, - .WTF_BG_WHITE = true, - .BOTTOM_BUTTONS_COLOR = rgb888torgb565(249, 205, 46), - .BW_TRAPEZ_BORDER = rgb888torgb565(120, 120, 120), - .BW_TRAPEZ_STRIPE = rgb888torgb565(0, 200, 255), - .BW_TRAPEZ_FILL = rgb888torgb565(140, 140, 140), - }, -}; - -#define COLOR_THEMES_COUNT 2 -#define BG_COLOR COLOR->BACKGROUND -#define FG_COLOR COLOR->FOREGROUND - -//LCD dimensions defines -#include "screen_layout.h" - -#endif diff --git a/Src/fft.c b/Src/fft.c deleted file mode 100644 index c33788c..0000000 --- a/Src/fft.c +++ /dev/null @@ -1,1072 +0,0 @@ -#include "fft.h" -#include "main.h" -#include "arm_const_structs.h" -#include "audio_filters.h" -#include "screen_layout.h" -#include "lcd.h" - -//Public variables -bool FFT_need_fft = true; // need to prepare data for display on the screen -bool FFT_new_buffer_ready = false; // buffer is full, can be processed -uint32_t FFT_buff_index = 0; // current buffer index when it is filled with FPGA -bool FFT_buff_current = 0; // current FFT Input buffer A - false, B - true -float32_t FFTInput_I_A[FFT_SIZE] = {0}; // incoming buffer FFT I -float32_t FFTInput_Q_A[FFT_SIZE] = {0}; // incoming buffer FFT Q -float32_t FFTInput_I_B[FFT_SIZE] = {0}; // incoming buffer FFT I -float32_t FFTInput_Q_B[FFT_SIZE] = {0}; // incoming buffer FFT Q -uint16_t FFT_FPS = 0; -uint16_t FFT_FPS_Last = 0; - -//Private variables -#if FFT_SIZE == 1024 -const static arm_cfft_instance_f32 *FFT_Inst = &arm_cfft_sR_f32_len1024; -#endif -#if FFT_SIZE == 512 -const static arm_cfft_instance_f32 *FFT_Inst = &arm_cfft_sR_f32_len512; -#endif -#if FFT_SIZE == 256 -const static arm_cfft_instance_f32 *FFT_Inst = &arm_cfft_sR_f32_len256; -#endif -#if FFT_SIZE == 128 -const static arm_cfft_instance_f32 *FFT_Inst = &arm_cfft_sR_f32_len128; -#endif - -static float32_t FFTInputCharge[FFT_DOUBLE_SIZE_BUFFER] = {0}; // charge FFT I and Q buffer -static float32_t FFTInput[FFT_DOUBLE_SIZE_BUFFER] = {0}; // combined FFT I and Q buffer -static float32_t FFTInput_tmp[LAY_FFT_PRINT_SIZE] = {0}; // temporary buffer for sorting, moving and fft compressing -static float32_t FFTOutput_mean[LAY_FFT_PRINT_SIZE] = {0}; // averaged FFT buffer (for output) -static float32_t maxValueFFT_rx = 0; // maximum value of the amplitude in the resulting frequency response -static float32_t maxValueFFT_tx = 0; // maximum value of the amplitude in the resulting frequency response -static uint32_t currentFFTFreq = 0; -static uint32_t lastWTFFreq = 0; //last WTF printed freq -static uint16_t color_scale[LAY_FFT_HEIGHT] = {0}; // color gradient in height FFT -static uint16_t palette_fft[LAY_FFT_HEIGHT + 1] = {0}; // color palette with FFT colors -static uint16_t palette_bg_gradient[LAY_FFT_HEIGHT + 1] = {0}; // color palette with gradient background of FFT -static uint16_t palette_bw_fft_colors[LAY_FFT_HEIGHT + 1] = {0}; // color palette with bw highlighted FFT colors -static uint16_t palette_bw_bg_colors[LAY_FFT_HEIGHT + 1] = {0}; // color palette with bw highlighted background colors -IRAM1 static uint16_t fft_output_buffer[LAY_FFT_HEIGHT][LAY_FFT_PRINT_SIZE] = {{0}}; //buffer with fft print data -IRAM1 __attribute__((aligned(32))) static uint8_t indexed_wtf_buffer[LAY_WTF_HEIGHT][LAY_FFT_PRINT_SIZE] = {{0}}; //indexed color buffer with wtf -static uint32_t wtf_buffer_freqs[LAY_WTF_HEIGHT] = {0}; // frequencies for each row of the waterfall -IRAM1 static uint16_t wtf_output_line[LAY_FFT_PRINT_SIZE] = {0}; // temporary buffer to draw the waterfall -static uint16_t fft_header[LAY_FFT_PRINT_SIZE] = {0}; //buffer with fft colors output -static int32_t grid_lines_pos[20] = {-1}; //grid lines positions -static int16_t bw_line_start = 0; //BW bar params -static int16_t bw_line_width = 0; //BW bar params -static int16_t bw_line_end = 0; //BW bar params -static int16_t bw_line_center = 0; //BW bar params -static uint16_t print_wtf_yindex = 0; // the current coordinate of the waterfall output via DMA -static float32_t window_multipliers[FFT_SIZE] = {0}; // coefficients of the selected window function -static uint16_t bandmap_line_tmp[LAY_FFT_PRINT_SIZE] = {0}; // temporary buffer to move the waterfall -static arm_sort_instance_f32 FFT_sortInstance = {0}; // sorting instance (to find the median) -static uint32_t print_fft_dma_estimated_size = 0; //block size for dma -static uint32_t print_fft_dma_position = 0; //positior for dma fft print -// Decimator for Zoom FFT -static arm_fir_decimate_instance_f32 DECIMATE_ZOOM_FFT_I; -static arm_fir_decimate_instance_f32 DECIMATE_ZOOM_FFT_Q; -static float32_t decimZoomFFTIState[FFT_SIZE + 4 - 1]; -static float32_t decimZoomFFTQState[FFT_SIZE + 4 - 1]; -static uint_fast16_t zoomed_width = 0; -//Коэффициенты для ZoomFFT lowpass filtering / дециматора -static arm_biquad_cascade_df2T_instance_f32 IIR_biquad_Zoom_FFT_I = - { - .numStages = ZOOMFFT_DECIM_STAGES, - .pCoeffs = (float32_t *)(float32_t[ZOOMFFT_DECIM_STAGES * 5]){0}, - .pState = (float32_t *)(float32_t[ZOOMFFT_DECIM_STAGES * 2]){0}}; -static arm_biquad_cascade_df2T_instance_f32 IIR_biquad_Zoom_FFT_Q = - { - .numStages = ZOOMFFT_DECIM_STAGES, - .pCoeffs = (float32_t *)(float32_t[ZOOMFFT_DECIM_STAGES * 5]){0}, - .pState = (float32_t *)(float32_t[ZOOMFFT_DECIM_STAGES * 2]){0}}; - -static const float32_t *mag_coeffs[17] = - { - NULL, // 0 - NULL, // 1 - // 2x magnify, 24kHz, sample rate 96k, 60dB stopband - (float32_t *)(const float32_t[ZOOMFFT_DECIM_STAGES * 5]){2.484242790213,0,0,0,0,1,1.898288195851,1,0.6974136319001,-0.3065583381015,0.02825209609289,0,0,0,0,1,1.500253906972,1,0.008112054577326,-0.7721086004364,1,0,0,0,0}, - NULL, // 3 - // 4x magnify, 12kHz, sample rate 96k, 60dB stopband - (float32_t *)(const float32_t[ZOOMFFT_DECIM_STAGES * 5]){0.7134827863049,0,0,0,0,1,1.472005720002,1,1.415948015621,-0.5717655848516,0.01368406787431,0,0,0,0,1,0.1832282425444,1,1.300866126796,-0.8337859400983,1,0,0,0,0}, - NULL, // 5 - NULL, // 6 - NULL, // 7 - // 8x magnify, 6kHz, sample rate 96k, 60dB stopband - (float32_t *)(const float32_t[ZOOMFFT_DECIM_STAGES * 5]){0.2759821831997,0,0,0,0,1,0.4104549042334,1,1.718681040914,-0.7605249789395,0.009291375667003,0,0,0,0,1,-1.132037961389,1,1.762711686353,-0.9065677781814,1,0,0,0,0}, - NULL, // 9 - NULL, // 10 - NULL, // 11 - NULL, // 12 - NULL, // 13 - NULL, // 14 - NULL, // 15 - // 16x magnify, 3kHz, sample rate 96k, 60dB stopband - (float32_t *)(const float32_t[ZOOMFFT_DECIM_STAGES * 5]){0.1614831396677,0,0,0,0,1,-0.9158954187733,1,1.861713716539,-0.8727253274572,0.008184762202728,0,0,0,0,1,-1.745517115598,1,1.914110094101,-0.9512646565581,1,0,0,0,0}, -}; - -static const arm_fir_decimate_instance_f32 FirZoomFFTDecimate[17] = - { - {0}, // 0 - {0}, // 1 - // 48ksps, 12kHz lowpass - { - .numTaps = 4, - .pCoeffs = (float32_t *)(const float32_t[]){475.1179397144384210E-6f, 0.503905202786044337f, 0.503905202786044337f, 475.1179397144384210E-6f}, - .pState = NULL}, - {0}, // 3 - // 48ksps, 6kHz lowpass - { - .numTaps = 4, - .pCoeffs = (float32_t *)(const float32_t[]){0.198273254218889416f, 0.298085149879260325f, 0.298085149879260325f, 0.198273254218889416f}, - .pState = NULL}, - {0}, // 5 - {0}, // 6 - {0}, // 7 - // 48ksps, 3kHz lowpass - { - .numTaps = 4, - .pCoeffs = (float32_t *)(const float32_t[]){0.199820836596682871f, 0.272777397353925699f, 0.272777397353925699f, 0.199820836596682871f}, - .pState = NULL}, - {0}, // 9 - {0}, // 10 - {0}, // 11 - {0}, // 12 - {0}, // 13 - {0}, // 14 - {0}, // 15 - // 48ksps, 1.5kHz lowpass - { - .numTaps = 4, - .pCoeffs = (float32_t *)(const float32_t[]){0.199820836596682871f, 0.272777397353925699f, 0.272777397353925699f, 0.199820836596682871f}, - .pState = NULL}, -}; - -//Prototypes -static uint16_t getFFTColor(uint_fast8_t height); // get color from signal strength -static void FFT_fill_color_palette(void); // prepare the color palette -static void FFT_move(int32_t _freq_diff); // shift the waterfall -static int32_t getFreqPositionOnFFT(uint32_t freq); // get the position on the FFT for a given frequency -static uint32_t FFT_getLensCorrection(uint32_t normal_distance_from_center); - -// FFT initialization -void FFT_PreInit(void) -{ - //Windowing - //Dolph–Chebyshev - if (TRX.FFT_Window == 1) - { - const float64_t atten = 100.0; - float64_t max = 0.0; - float64_t tg = pow(10.0, atten / 20.0); - float64_t x0 = cosh((1.0 / ((float64_t)FFT_SIZE - 1.0)) * acosh(tg)); - float64_t M = (FFT_SIZE - 1) / 2; - if((FFT_SIZE % 2) == 0) - M = M + 0.5; /* handle even length windows */ - for(uint32_t nn=0; nn < ((FFT_SIZE / 2) + 1); nn++) - { - float64_t n = nn - M; - float64_t sum = 0.0; - for(uint32_t i = 1; i <= M; i++) - { - float64_t cheby_poly = 0.0; - float64_t cp_x = x0 * cos(F_PI * i / (float64_t)FFT_SIZE); - float64_t cp_n = FFT_SIZE - 1; - if (fabs(cp_x) <= 1) - cheby_poly = cos(cp_n * acos(cp_x)); - else - cheby_poly = cosh(cp_n * acosh(cp_x)); - - sum += cheby_poly * cos(2.0 * n * F_PI * (float64_t)i / (float64_t)FFT_SIZE); - } - window_multipliers[nn] = tg + 2 * sum; - window_multipliers[FFT_SIZE - nn - 1] = window_multipliers[nn]; - if(window_multipliers[nn] > max) - max = window_multipliers[nn]; - } - for(uint32_t nn=0; nn < FFT_SIZE; nn++) - window_multipliers[nn] /= max; /* normalise everything */ - } - for (uint_fast16_t i = 0; i < FFT_SIZE; i++) - { - //Blackman-Harris - if (TRX.FFT_Window == 2) - window_multipliers[i] = 0.35875f - 0.48829f * arm_cos_f32(2.0f * F_PI * (float32_t)i / ((float32_t)FFT_SIZE - 1.0f)) + 0.14128f * arm_cos_f32(4.0f * F_PI * (float32_t)i / ((float32_t)FFT_SIZE - 1.0f)) - 0.01168f * arm_cos_f32(6.0f * F_PI * (float32_t)i / ((float32_t)FFT_SIZE - 1.0f)); - //Nutall - else if (TRX.FFT_Window == 3) - window_multipliers[i] = 0.355768f - 0.487396f * arm_cos_f32(2.0f * F_PI * (float32_t)i / ((float32_t)FFT_SIZE - 1.0f)) + 0.144232f * arm_cos_f32(4.0f * F_PI * (float32_t)i / ((float32_t)FFT_SIZE - 1.0f)) - 0.012604 * arm_cos_f32(6.0f * F_PI * (float32_t)i / ((float32_t)FFT_SIZE - 1.0f)); - //Blackman-Nutall - else if (TRX.FFT_Window == 4) - window_multipliers[i] = 0.3635819f - 0.4891775f * arm_cos_f32(2.0f * F_PI * (float32_t)i / ((float32_t)FFT_SIZE - 1.0f)) + 0.1365995f * arm_cos_f32(4.0f * F_PI * (float32_t)i / ((float32_t)FFT_SIZE - 1.0f)) - 0.0106411f * arm_cos_f32(6.0f * F_PI * (float32_t)i / ((float32_t)FFT_SIZE - 1.0f)); - //Hann - else if (TRX.FFT_Window == 5) - window_multipliers[i] = 0.5f * (1.0f - arm_cos_f32(2.0f * F_PI * (float32_t)i / (float32_t)FFT_SIZE)); - //Hamming - else if (TRX.FFT_Window == 6) - window_multipliers[i] = 0.54f - 0.46f * arm_cos_f32((2.0f * F_PI * (float32_t)i) / ((float32_t)FFT_SIZE - 1.0f)); - //No window - else if (TRX.FFT_Window == 7) - window_multipliers[i] = 1.0f; - } - - // initialize sort - arm_sort_init_f32(&FFT_sortInstance, ARM_SORT_QUICK, ARM_SORT_ASCENDING); -} - -void FFT_Init(void) -{ - FFT_fill_color_palette(); - //ZoomFFT - if (TRX.FFT_Zoom > 1) - { - IIR_biquad_Zoom_FFT_I.pCoeffs = mag_coeffs[TRX.FFT_Zoom]; - IIR_biquad_Zoom_FFT_Q.pCoeffs = mag_coeffs[TRX.FFT_Zoom]; - memset(IIR_biquad_Zoom_FFT_I.pState, 0x00, sizeof(float32_t) * ZOOMFFT_DECIM_STAGES * 2); - memset(IIR_biquad_Zoom_FFT_Q.pState, 0x00, sizeof(float32_t) * ZOOMFFT_DECIM_STAGES * 2); - arm_fir_decimate_init_f32(&DECIMATE_ZOOM_FFT_I, - FirZoomFFTDecimate[TRX.FFT_Zoom].numTaps, - TRX.FFT_Zoom, // Decimation factor - FirZoomFFTDecimate[TRX.FFT_Zoom].pCoeffs, - decimZoomFFTIState, // Filter state variables - FFT_SIZE); - - arm_fir_decimate_init_f32(&DECIMATE_ZOOM_FFT_Q, - FirZoomFFTDecimate[TRX.FFT_Zoom].numTaps, - TRX.FFT_Zoom, // Decimation factor - FirZoomFFTDecimate[TRX.FFT_Zoom].pCoeffs, - decimZoomFFTQState, // Filter state variables - FFT_SIZE); - zoomed_width = FFT_SIZE / TRX.FFT_Zoom; - } - else - zoomed_width = FFT_SIZE; - - // clear the buffers - memset(&fft_output_buffer, 0x00, sizeof(fft_output_buffer)); - memset(&indexed_wtf_buffer, LAY_FFT_HEIGHT, sizeof(indexed_wtf_buffer)); - memset(&FFTInputCharge, 0x00, sizeof(FFTInputCharge)); -} - -// FFT calculation -void FFT_bufferPrepare(void) -{ - if (!TRX.FFT_Enabled) - return; - if (!FFT_new_buffer_ready) - return; - /*if (CPU_LOAD.Load > 90) - return;*/ - - float32_t* FFTInput_I_current = !FFT_buff_current ? (float32_t*)&FFTInput_I_A : (float32_t*)&FFTInput_I_B; //inverted - float32_t* FFTInput_Q_current = !FFT_buff_current ? (float32_t*)&FFTInput_Q_A : (float32_t*)&FFTInput_Q_B; - - //Process DC corrector filter - if (!TRX_on_TX()) - { - dc_filter(FFTInput_I_current, FFT_SIZE, DC_FILTER_FFT_I); - dc_filter(FFTInput_Q_current, FFT_SIZE, DC_FILTER_FFT_Q); - } - - //ZoomFFT - if (TRX.FFT_Zoom > 1) - { - //Biquad LPF filter - arm_biquad_cascade_df2T_f32(&IIR_biquad_Zoom_FFT_I, FFTInput_I_current, FFTInput_I_current, FFT_SIZE); - arm_biquad_cascade_df2T_f32(&IIR_biquad_Zoom_FFT_Q, FFTInput_Q_current, FFTInput_Q_current, FFT_SIZE); - // Decimator - arm_fir_decimate_f32(&DECIMATE_ZOOM_FFT_I, FFTInput_I_current, FFTInput_I_current, FFT_SIZE); - arm_fir_decimate_f32(&DECIMATE_ZOOM_FFT_Q, FFTInput_Q_current, FFTInput_Q_current, FFT_SIZE); - // Shift old data - memcpy(&FFTInputCharge[0], &FFTInputCharge[zoomed_width], sizeof(float32_t) * (FFT_SIZE - zoomed_width)); - // Add new data - for (uint_fast16_t i = 0; i < zoomed_width; i++) - { - uint16_t wind_pos = i * (FFT_SIZE / zoomed_width); - FFTInputCharge[(FFT_SIZE - zoomed_width + i) * 2] = FFTInput_I_current[i] * window_multipliers[wind_pos]; - FFTInputCharge[(FFT_SIZE - zoomed_width + i) * 2 + 1] = FFTInput_Q_current[i] * window_multipliers[wind_pos]; - } - } - else - { - // make a combined buffer for calculation - for (uint_fast16_t i = 0; i < FFT_SIZE; i++) - { - FFTInputCharge[i * 2] = FFTInput_I_current[i] * window_multipliers[i]; - FFTInputCharge[i * 2 + 1] = FFTInput_Q_current[i] * window_multipliers[i]; - } - } - FFT_new_buffer_ready = false; -} - -void FFT_doFFT(void) -{ - if (!TRX.FFT_Enabled) - return; - if (!FFT_need_fft) - return; - if (!TRX_Inited) - return; - /*if (CPU_LOAD.Load > 90) - return;*/ - - // Get charge buffer - memcpy(&FFTInput, &FFTInputCharge, sizeof(FFTInput)); - memset(&FFTInputCharge, 0x00, sizeof(FFTInputCharge)); - - arm_cfft_f32(FFT_Inst, FFTInput, 0, 1); - arm_cmplx_mag_f32(FFTInput, FFTInput, FFT_SIZE); - - // Swap fft parts - memcpy(&FFTInput[FFT_SIZE], &FFTInput[0], sizeof(float32_t) * (FFT_SIZE / 2)); //left - > tmp - memcpy(&FFTInput[0], &FFTInput[FFT_SIZE / 2], sizeof(float32_t) * (FFT_SIZE / 2)); //right - > left - memcpy(&FFTInput[FFT_SIZE / 2], &FFTInput[FFT_SIZE], sizeof(float32_t) * (FFT_SIZE / 2)); //tmp - > right - - // Compress the calculated FFT to visible - memcpy(&FFTInput[0], &FFTInput[FFT_SIZE / 2 - FFT_USEFUL_SIZE / 2], sizeof(float32_t) * FFT_USEFUL_SIZE); //useful fft part - float32_t fft_compress_rate = (float32_t)FFT_USEFUL_SIZE / (float32_t)LAY_FFT_PRINT_SIZE; - float32_t fft_compress_rate_half = floorf(fft_compress_rate / 2.0f); //full points - float32_t fft_compress_rate_parts = fmodf(fft_compress_rate / 2.0f, 1.0f); //partial points - - //Compress FFT - for (uint32_t i = 0; i < LAY_FFT_PRINT_SIZE; i++) - { - int32_t left_index = (uint32_t)((float32_t)i * fft_compress_rate - fft_compress_rate_half); - if(left_index < 0) - left_index = 0; - int32_t right_index = (uint32_t)((float32_t)i * fft_compress_rate + fft_compress_rate_half); - if(right_index >= FFT_USEFUL_SIZE) - right_index = FFT_USEFUL_SIZE - 1; - - float32_t points = 0; - float32_t accum = 0.0f; - //full points - for(uint32_t index = left_index; index <= right_index ; index++) - { - accum += FFTInput[index]; - points += 1.0f; - } - //partial points - if(fft_compress_rate_parts > 0.0f) - { - if(left_index > 0) - { - accum += FFTInput[left_index - 1] * fft_compress_rate_parts; - points += fft_compress_rate_parts; - } - if(right_index < (FFT_USEFUL_SIZE - 1)) - { - accum += FFTInput[right_index + 1] * fft_compress_rate_parts; - points += fft_compress_rate_parts; - } - } - FFTInput_tmp[i] = accum / points; - } - - memcpy(&FFTInput, FFTInput_tmp, sizeof(FFTInput_tmp)); - - //Delete noise - float32_t minAmplValue = 0; - uint32_t minAmplIndex = 0; - arm_min_f32(FFTInput, LAY_FFT_PRINT_SIZE, &minAmplValue, &minAmplIndex); - if (!TRX_on_TX()) - arm_offset_f32(FFTInput, -minAmplValue * 0.8f, FFTInput, LAY_FFT_PRINT_SIZE); - - // Looking for the median in frequency response - arm_sort_f32(&FFT_sortInstance, FFTInput, FFTInput_tmp, LAY_FFT_PRINT_SIZE); - float32_t medianValue = FFTInput_tmp[LAY_FFT_PRINT_SIZE / 2]; - - // Maximum amplitude - float32_t maxValueFFT = maxValueFFT_rx; - if (TRX_on_TX()) - maxValueFFT = maxValueFFT_tx; - float32_t maxValue = (medianValue * FFT_MAX); - float32_t targetValue = (medianValue * FFT_TARGET); - float32_t minValue = (medianValue * FFT_MIN); - - // Looking for the maximum in frequency response - float32_t maxAmplValue = 0; - arm_max_no_idx_f32(FFTInput, LAY_FFT_PRINT_SIZE, &maxAmplValue); - - // Auto-calibrate FFT levels - maxValueFFT += (targetValue - maxValueFFT) / FFT_STEP_COEFF; - - // minimum-maximum threshold for median - if (maxValueFFT < minValue) - maxValueFFT = minValue; - if (maxValueFFT > maxValue) - maxValueFFT = maxValue; - - // Compress peaks - float32_t compressTargetValue = (maxValueFFT * FFT_COMPRESS_INTERVAL); - float32_t compressSourceInterval = maxAmplValue - compressTargetValue; - float32_t compressTargetInterval = maxValueFFT - compressTargetValue; - float32_t compressRate = compressTargetInterval / compressSourceInterval; - if (!TRX_on_TX() && TRX.FFT_Compressor) - { - for (uint_fast16_t i = 0; i < LAY_FFT_PRINT_SIZE; i++) - if (FFTInput[i] > compressTargetValue) - FFTInput[i] = compressTargetValue + ((FFTInput[i] - compressTargetValue) * compressRate); - } - - //limits - if (TRX_on_TX()) - maxValueFFT = maxAmplValue; - if (maxValueFFT < 0.0000001f) - maxValueFFT = 0.0000001f; - - // save values ​​for switching RX / TX - if (TRX_on_TX()) - maxValueFFT_tx = maxValueFFT; - else - maxValueFFT_rx = maxValueFFT; - - // Normalize the frequency response to one - if (maxValueFFT > 0) - arm_scale_f32(FFTInput, 1.0f / maxValueFFT, FFTInput, LAY_FFT_PRINT_SIZE); - - // Averaging values ​​for subsequent output - float32_t averaging = (float32_t)TRX.FFT_Averaging; - if (averaging < 1.0f) - averaging = 1.0f; - for (uint_fast16_t i = 0; i < LAY_FFT_PRINT_SIZE; i++) - if (FFTOutput_mean[i] < FFTInput[i]) - FFTOutput_mean[i] += (FFTInput[i] - FFTOutput_mean[i]) / averaging; - else - FFTOutput_mean[i] -= (FFTOutput_mean[i] - FFTInput[i]) / averaging; - - FFT_need_fft = false; -} - -// FFT output -bool FFT_printFFT(void) -{ - if (LCD_busy) - return false; - if (!TRX.FFT_Enabled) - return false; - if (!TRX_Inited) - return false; - if (FFT_need_fft) - return false; - if (LCD_systemMenuOpened) - return false; - /*if (CPU_LOAD.Load > 90) - return;*/ - LCD_busy = true; - - uint16_t height = 0; // column height in FFT output - uint16_t tmp = 0; - - if (CurrentVFO()->Freq != currentFFTFreq) - { - //calculate scale lines - memset(grid_lines_pos, 0x00, sizeof(grid_lines_pos)); - uint8_t index = 0; - for (int8_t i = 0; i < FFT_MAX_GRID_NUMBER; i++) - { - int32_t pos = -1; - if (TRX.FFT_Grid > 0) - { - pos = getFreqPositionOnFFT((CurrentVFO()->Freq / 5000 * 5000) + ((i - 6) * 5000)); - } - if (pos >= 0) - { - grid_lines_pos[index] = pos; - index++; - } - } - - // offset the fft if needed - FFT_move((int32_t)CurrentVFO()->Freq - (int32_t)currentFFTFreq); - currentFFTFreq = CurrentVFO()->Freq; - } - - // move the waterfall down using DMA - for (tmp = LAY_WTF_HEIGHT - 1; tmp > 0; tmp--) - { - HAL_DMA_Start(&hdma_memtomem_dma2_stream7, (uint32_t)&indexed_wtf_buffer[tmp - 1], (uint32_t)&indexed_wtf_buffer[tmp], LAY_FFT_PRINT_SIZE / 4); //32bit dma, 8bit index data - HAL_DMA_PollForTransfer(&hdma_memtomem_dma2_stream7, HAL_DMA_FULL_TRANSFER, HAL_MAX_DELAY); - wtf_buffer_freqs[tmp] = wtf_buffer_freqs[tmp - 1]; - } - - // calculate the colors for the waterfall - for (uint32_t fft_x = 0; fft_x < LAY_FFT_PRINT_SIZE; fft_x++) - { - height = (uint16_t)((float32_t)FFTOutput_mean[(uint_fast16_t)fft_x] * LAY_FFT_HEIGHT); - if (height > LAY_FFT_HEIGHT) - height = LAY_FFT_HEIGHT; - - wtf_buffer_freqs[0] = currentFFTFreq; - fft_header[fft_x] = height; - indexed_wtf_buffer[0][fft_x] = LAY_FFT_HEIGHT - height; - if (fft_x == (LAY_FFT_PRINT_SIZE / 2)) - continue; - } - - // calculate bw bar size - switch (CurrentVFO()->Mode) - { - case TRX_MODE_LSB: - case TRX_MODE_CW_L: - case TRX_MODE_DIGI_L: - bw_line_width = (int16_t)(CurrentVFO()->LPF_Filter_Width / FFT_HZ_IN_PIXEL * TRX.FFT_Zoom); - if (bw_line_width > (LAY_FFT_PRINT_SIZE / 2)) - bw_line_width = LAY_FFT_PRINT_SIZE / 2; - bw_line_start = LAY_FFT_PRINT_SIZE / 2 - bw_line_width; - break; - case TRX_MODE_USB: - case TRX_MODE_CW_U: - case TRX_MODE_DIGI_U: - bw_line_width = (int16_t)(CurrentVFO()->LPF_Filter_Width / FFT_HZ_IN_PIXEL * TRX.FFT_Zoom); - if (bw_line_width > (LAY_FFT_PRINT_SIZE / 2)) - bw_line_width = LAY_FFT_PRINT_SIZE / 2; - bw_line_start = LAY_FFT_PRINT_SIZE / 2; - break; - case TRX_MODE_NFM: - case TRX_MODE_AM: - bw_line_width = (int16_t)(CurrentVFO()->LPF_Filter_Width / FFT_HZ_IN_PIXEL * TRX.FFT_Zoom * 2); - if (bw_line_width > LAY_FFT_PRINT_SIZE) - bw_line_width = LAY_FFT_PRINT_SIZE; - bw_line_start = LAY_FFT_PRINT_SIZE / 2 - (bw_line_width / 2); - break; - case TRX_MODE_WFM: - bw_line_width = LAY_FFT_PRINT_SIZE; - bw_line_start = LAY_FFT_PRINT_SIZE / 2 - (bw_line_width / 2); - break; - default: - break; - } - bw_line_center = bw_line_start + bw_line_width / 2; - bw_line_end = bw_line_start + bw_line_width; - - // prepare FFT print over the waterfall - uint16_t background = BG_COLOR; - for (uint32_t fft_y = 0; fft_y < LAY_FFT_HEIGHT; fft_y++) - { - if (TRX.FFT_Background) - background = palette_bg_gradient[fft_y]; - - //gradient - for (uint32_t fft_x = 0; fft_x < LAY_FFT_PRINT_SIZE; fft_x++) - { - if (fft_x >= bw_line_start && fft_x <= bw_line_end) //bw bar - { - if (fft_y >= (LAY_FFT_HEIGHT - fft_header[fft_x])) - fft_output_buffer[fft_y][fft_x] = palette_bw_fft_colors[fft_y]; - else - fft_output_buffer[fft_y][fft_x] = palette_bw_bg_colors[fft_y]; - } - else //other fft data - { - if (fft_y >= (LAY_FFT_HEIGHT - fft_header[fft_x])) - fft_output_buffer[fft_y][fft_x] = palette_fft[fft_y]; - else - fft_output_buffer[fft_y][fft_x] = background; - } - } - } - - //draw grids - if (TRX.FFT_Grid == 1 || TRX.FFT_Grid == 2) - { - for (int32_t grid_line_index = 0; grid_line_index < FFT_MAX_GRID_NUMBER; grid_line_index++) - if (grid_lines_pos[grid_line_index] > 0 && grid_lines_pos[grid_line_index] < LAY_FFT_PRINT_SIZE && grid_lines_pos[grid_line_index] != (LAY_FFT_PRINT_SIZE / 2)) - for (uint32_t fft_y = 0; fft_y < LAY_FFT_HEIGHT; fft_y++) - fft_output_buffer[fft_y][grid_lines_pos[grid_line_index]] = palette_fft[LAY_FFT_HEIGHT * 3 / 4]; //mixColors(fft_output_buffer[fft_y][grid_lines_pos[grid_line_index]], palette_fft[fftHeight / 2], FFT_SCALE_LINES_BRIGHTNESS); - } - - //Gauss filter center - if (TRX.CW_GaussFilter && (CurrentVFO()->Mode == TRX_MODE_CW_L || CurrentVFO()->Mode == TRX_MODE_CW_U)) - { - for (uint32_t fft_y = 0; fft_y < LAY_FFT_HEIGHT; fft_y++) - fft_output_buffer[fft_y][bw_line_center] = palette_fft[LAY_FFT_HEIGHT / 2]; //mixColors(fft_output_buffer[fft_y][bw_line_center], palette_fft[fftHeight / 2], FFT_SCALE_LINES_BRIGHTNESS); - } - - //draw center line - for (uint32_t fft_y = 0; fft_y < LAY_FFT_HEIGHT; fft_y++) - fft_output_buffer[fft_y][(LAY_FFT_PRINT_SIZE / 2)] = palette_fft[LAY_FFT_HEIGHT / 2]; //mixColors(fft_output_buffer[fft_y][(LAY_FFT_PRINT_SIZE / 2)], palette_fft[fftHeight / 2], FFT_SCALE_LINES_BRIGHTNESS); - - //Print FFT - LCDDriver_SetCursorAreaPosition(0, LAY_FFT_FFTWTF_POS_Y, LAY_FFT_PRINT_SIZE - 1, (LAY_FFT_FFTWTF_POS_Y + LAY_FFT_HEIGHT)); - print_fft_dma_estimated_size = LAY_FFT_PRINT_SIZE * LAY_FFT_HEIGHT; - print_fft_dma_position = 0; - FFT_afterPrintFFT(); - return true; -} - -//actions after FFT_printFFT -void FFT_afterPrintFFT(void) -{ - //continue DMA draw? - if(print_fft_dma_estimated_size > 0) - { - if(print_fft_dma_estimated_size <= FFT_DMA_MAX_BLOCK) - { - HAL_DMA_Start_IT(&hdma_memtomem_dma2_stream5, (uint32_t)&fft_output_buffer[0] + print_fft_dma_position * 2, LCD_FSMC_DATA_ADDR, print_fft_dma_estimated_size); - print_fft_dma_estimated_size = 0; - print_fft_dma_position = 0; - } - else - { - print_fft_dma_estimated_size -= FFT_DMA_MAX_BLOCK; - HAL_DMA_Start_IT(&hdma_memtomem_dma2_stream5, (uint32_t)&fft_output_buffer[0] + print_fft_dma_position * 2, LCD_FSMC_DATA_ADDR, FFT_DMA_MAX_BLOCK); - print_fft_dma_position += FFT_DMA_MAX_BLOCK; - } - return; - } - - // clear and display part of the vertical bar - memset(bandmap_line_tmp, 0x00, sizeof(bandmap_line_tmp)); - - // output bandmaps - int8_t band_curr = getBandFromFreq(CurrentVFO()->Freq, true); - int8_t band_left = band_curr; - if (band_curr > 0) - band_left = band_curr - 1; - int8_t band_right = band_curr; - if (band_curr < (BANDS_COUNT - 1)) - band_right = band_curr + 1; - int32_t fft_freq_position_start = 0; - int32_t fft_freq_position_stop = 0; - for (uint16_t band = band_left; band <= band_right; band++) - { - //regions - for (uint16_t region = 0; region < BANDS[band].regionsCount; region++) - { - uint16_t region_color = COLOR->BANDMAP_SSB; - if (BANDS[band].regions[region].mode == TRX_MODE_CW_L || BANDS[band].regions[region].mode == TRX_MODE_CW_U) - region_color = COLOR->BANDMAP_CW; - else if (BANDS[band].regions[region].mode == TRX_MODE_DIGI_L || BANDS[band].regions[region].mode == TRX_MODE_DIGI_U) - region_color = COLOR->BANDMAP_DIGI; - else if (BANDS[band].regions[region].mode == TRX_MODE_NFM || BANDS[band].regions[region].mode == TRX_MODE_WFM) - region_color = COLOR->BANDMAP_FM; - else if (BANDS[band].regions[region].mode == TRX_MODE_AM) - region_color = COLOR->BANDMAP_AM; - - fft_freq_position_start = getFreqPositionOnFFT(BANDS[band].regions[region].startFreq); - fft_freq_position_stop = getFreqPositionOnFFT(BANDS[band].regions[region].endFreq); - if (fft_freq_position_start != -1 && fft_freq_position_stop == -1) - fft_freq_position_stop = LAY_FFT_PRINT_SIZE; - if (fft_freq_position_start == -1 && fft_freq_position_stop != -1) - fft_freq_position_start = 0; - if (fft_freq_position_start == -1 && fft_freq_position_stop == -1 && BANDS[band].regions[region].startFreq < CurrentVFO()->Freq && BANDS[band].regions[region].endFreq > CurrentVFO()->Freq) - { - fft_freq_position_start = 0; - fft_freq_position_stop = LAY_FFT_PRINT_SIZE; - } - - if (fft_freq_position_start != -1 && fft_freq_position_stop != -1) - for (int32_t pixel_counter = fft_freq_position_start; pixel_counter < fft_freq_position_stop; pixel_counter++) - bandmap_line_tmp[(uint16_t)pixel_counter] = region_color; - } - } - - LCDDriver_SetCursorAreaPosition(0, LAY_FFT_FFTWTF_POS_Y - 4, LAY_FFT_PRINT_SIZE - 1, LAY_FFT_FFTWTF_POS_Y - 3); - for (uint8_t r = 0; r < 2; r++) - for (uint32_t pixel_counter = 0; pixel_counter < LAY_FFT_PRINT_SIZE; pixel_counter++) - LCDDriver_SendData(bandmap_line_tmp[pixel_counter]); - - // display the waterfall using DMA - print_wtf_yindex = 0; - FFT_printWaterfallDMA(); -} - -// waterfall output -void FFT_printWaterfallDMA(void) -{ - //wtf area - if (print_wtf_yindex == 0) - LCDDriver_SetCursorAreaPosition(0, LAY_FFT_FFTWTF_POS_Y + LAY_FFT_HEIGHT, LAY_FFT_PRINT_SIZE - 1, LAY_FFT_FFTWTF_POS_Y + LAY_FFT_HEIGHT + (uint16_t)LAY_WTF_HEIGHT - 1); - -//print waterfall line - if (print_wtf_yindex < LAY_WTF_HEIGHT) - { - // calculate offset - float32_t freq_diff = (((float32_t)currentFFTFreq - (float32_t)wtf_buffer_freqs[print_wtf_yindex]) / FFT_HZ_IN_PIXEL) * (float32_t)TRX.FFT_Zoom; - float32_t freq_diff_part = fmodf(freq_diff, 1.0f); - int32_t margin_left = 0; - if (freq_diff < 0) - margin_left = -floorf(freq_diff); - if (margin_left > LAY_FFT_PRINT_SIZE) - margin_left = LAY_FFT_PRINT_SIZE; - int32_t margin_right = 0; - if (freq_diff > 0) - margin_right = ceilf(freq_diff); - if (margin_right > LAY_FFT_PRINT_SIZE) - margin_right = LAY_FFT_PRINT_SIZE; - if ((margin_left + margin_right) > LAY_FFT_PRINT_SIZE) - margin_right = 0; - //rounding - int32_t body_width = LAY_FFT_PRINT_SIZE - margin_left - margin_right; - - if (body_width <= 0) - { - memset(&wtf_output_line, BG_COLOR, sizeof(wtf_output_line)); - } - else - { - if (margin_left == 0 && margin_right == 0) - { - for (uint32_t wtf_x = 0; wtf_x < LAY_FFT_PRINT_SIZE; wtf_x++) - if (wtf_x >= bw_line_start && wtf_x <= bw_line_end) //print bw bar - wtf_output_line[wtf_x] = palette_bw_fft_colors[indexed_wtf_buffer[print_wtf_yindex][wtf_x]]; - else - wtf_output_line[wtf_x] = palette_fft[indexed_wtf_buffer[print_wtf_yindex][wtf_x]]; - } - else if (margin_left > 0) - { - memset(&wtf_output_line, BG_COLOR, (uint32_t)(margin_left * 2)); // fill the space to the left - for (uint32_t wtf_x = 0; wtf_x < (LAY_FFT_PRINT_SIZE - margin_left); wtf_x++) - if ((margin_left + wtf_x) >= bw_line_start && (margin_left + wtf_x) <= bw_line_end) //print bw bar - wtf_output_line[margin_left + wtf_x] = palette_bw_fft_colors[indexed_wtf_buffer[print_wtf_yindex][wtf_x]]; - else - wtf_output_line[margin_left + wtf_x] = palette_fft[indexed_wtf_buffer[print_wtf_yindex][wtf_x]]; - } - if (margin_right > 0) - { - memset(&wtf_output_line[(LAY_FFT_PRINT_SIZE - margin_right)], BG_COLOR, (uint32_t)(margin_right * 2)); // fill the space to the right - for (uint32_t wtf_x = 0; wtf_x < (LAY_FFT_PRINT_SIZE - margin_right); wtf_x++) - if (wtf_x >= bw_line_start && wtf_x <= bw_line_end) //print bw bar - wtf_output_line[wtf_x] = palette_bw_fft_colors[indexed_wtf_buffer[print_wtf_yindex][wtf_x + margin_right]]; - else - wtf_output_line[wtf_x] = palette_fft[indexed_wtf_buffer[print_wtf_yindex][wtf_x + margin_right]]; - } - } - - //print scale lines - if (TRX.FFT_Grid >= 2) - for (int8_t i = 0; i < FFT_MAX_GRID_NUMBER; i++) - if (grid_lines_pos[i] > 0) - wtf_output_line[grid_lines_pos[i]] = palette_fft[LAY_FFT_HEIGHT * 3 / 4]; //mixColors(wtf_output_line[grid_lines_pos[i]], palette_fft[fftHeight / 2], FFT_SCALE_LINES_BRIGHTNESS); - - //Gauss filter center - if (TRX.CW_GaussFilter && (CurrentVFO()->Mode == TRX_MODE_CW_L || CurrentVFO()->Mode == TRX_MODE_CW_U)) - wtf_output_line[bw_line_center] = palette_fft[LAY_FFT_HEIGHT / 2]; //mixColors(fft_output_buffer[fft_y][bw_line_center], palette_fft[fftHeight / 2], FFT_SCALE_LINES_BRIGHTNESS); - - //center line - wtf_output_line[LAY_FFT_PRINT_SIZE / 2] = palette_fft[LAY_FFT_HEIGHT / 2]; //mixColors(wtf_output_line[LAY_FFT_PRINT_SIZE / 2], palette_fft[fftHeight / 2], FFT_SCALE_LINES_BRIGHTNESS); - - //draw the line - HAL_DMA_Start_IT(&hdma_memtomem_dma2_stream6, (uint32_t)&wtf_output_line[0], LCD_FSMC_DATA_ADDR, LAY_FFT_PRINT_SIZE); - print_wtf_yindex++; - } - else - { - FFT_FPS++; - lastWTFFreq = currentFFTFreq; - FFT_need_fft = true; - LCD_busy = false; - } -} - -// shift the waterfall -static void FFT_move(int32_t _freq_diff) -{ - if (_freq_diff == 0) - return; - float32_t old_x_true = 0.0f; - int32_t old_x_l = 0; - int32_t old_x_r = 0; - float32_t freq_diff = ((float32_t)_freq_diff / FFT_HZ_IN_PIXEL) * (float32_t)TRX.FFT_Zoom; - float32_t old_x_part_r = fmodf(freq_diff, 1.0f); - float32_t old_x_part_l = 1.0f - old_x_part_r; - if (freq_diff < 0.0f) - { - old_x_part_l = fmodf(-freq_diff, 1.0f); - old_x_part_r = 1.0f - old_x_part_l; - } - - //Move mean Buffer - for (int32_t x = 0; x < LAY_FFT_PRINT_SIZE; x++) - { - old_x_true = (float32_t)x + freq_diff; - old_x_l = (int32_t)(floorf(old_x_true)); - old_x_r = (int32_t)(ceilf(old_x_true)); - - FFTInput_tmp[x] = 0; - - if ((old_x_true >= LAY_FFT_PRINT_SIZE) || (old_x_true < 0.0f)) - continue; - if ((old_x_l < LAY_FFT_PRINT_SIZE) && (old_x_l >= 0)) - FFTInput_tmp[x] += (FFTOutput_mean[old_x_l] * old_x_part_l); - if ((old_x_r < LAY_FFT_PRINT_SIZE) && (old_x_r >= 0)) - FFTInput_tmp[x] += (FFTOutput_mean[old_x_r] * old_x_part_r); - - //sides - if (old_x_r >= LAY_FFT_PRINT_SIZE) - FFTInput_tmp[x] = FFTOutput_mean[old_x_l]; - } - //save results - memcpy(&FFTOutput_mean, &FFTInput_tmp, sizeof FFTOutput_mean); - - //clean charge buffer - if(TRX.FFT_Zoom > 1) - memset(&FFTInputCharge[0], 0x00, sizeof(float32_t) * (FFT_SIZE - zoomed_width) * 2); -} - -// get color from signal strength -static uint16_t getFFTColor(uint_fast8_t height) // Get FFT color warmth (blue to red) -{ - uint_fast8_t red = 0; - uint_fast8_t green = 0; - uint_fast8_t blue = 0; - if (COLOR->WTF_BG_WHITE) - { - red = 255; - green = 255; - blue = 255; - } - //blue -> yellow -> red - if (TRX.FFT_Color == 1) - { - // r g b - // 0 0 0 - // 0 0 255 - // 255 255 0 - // 255 0 0 - // contrast of each of the 3 zones, the total should be 1.0f - const float32_t contrast1 = 0.02f; - const float32_t contrast2 = 0.45f; - const float32_t contrast3 = 0.53f; - - if (height < LAY_FFT_HEIGHT * contrast1) - { - blue = (uint_fast8_t)(height * 255 / (LAY_FFT_HEIGHT * contrast1)); - if (COLOR->WTF_BG_WHITE) - { - red -= blue; - green -= blue; - } - } - else if (height < LAY_FFT_HEIGHT * (contrast1 + contrast2)) - { - green = (uint_fast8_t)((height - LAY_FFT_HEIGHT * contrast1) * 255 / ((LAY_FFT_HEIGHT - LAY_FFT_HEIGHT * contrast1) * (contrast1 + contrast2))); - red = green; - blue = 255 - green; - } - else - { - red = 255; - blue = 0; - green = (uint_fast8_t)(255 - (height - (LAY_FFT_HEIGHT * (contrast1 + contrast2))) * 255 / ((LAY_FFT_HEIGHT - (LAY_FFT_HEIGHT * (contrast1 + contrast2))) * (contrast1 + contrast2 + contrast3))); - } - return rgb888torgb565(red, green, blue); - } - //black -> yellow -> red - if (TRX.FFT_Color == 2) - { - // r g b - // 0 0 0 - // 255 255 0 - // 255 0 0 - // contrast of each of the 2 zones, the total should be 1.0f - float32_t contrast1 = 0.5f; - float32_t contrast2 = 0.5f; - if (COLOR->WTF_BG_WHITE) - { - contrast1 = 0.2f; - contrast2 = 0.8f; - } - - if (height < LAY_FFT_HEIGHT * contrast1) - { - if (!COLOR->WTF_BG_WHITE) - { - red = (uint_fast8_t)(height * 255 / (LAY_FFT_HEIGHT * contrast1)); - green = (uint_fast8_t)(height * 255 / (LAY_FFT_HEIGHT * contrast1)); - blue = 0; - } - else - { - red = 255; - green = 255; - blue = 255 - (uint_fast8_t)(height * 255 / (LAY_FFT_HEIGHT * contrast1)); - } - } - else - { - red = 255; - blue = 0; - green = (uint_fast8_t)(255 - (height - (LAY_FFT_HEIGHT * (contrast1))) * 255 / ((LAY_FFT_HEIGHT - (LAY_FFT_HEIGHT * (contrast1))) * (contrast1 + contrast2))); - if (COLOR->WTF_BG_WHITE) - { - blue = green; - } - } - return rgb888torgb565(red, green, blue); - } - //black -> yellow -> green - if (TRX.FFT_Color == 3) - { - // r g b - // 0 0 0 - // 255 255 0 - // 0 255 0 - // contrast of each of the 2 zones, the total should be 1.0f - float32_t contrast1 = 0.5f; - float32_t contrast2 = 0.5f; - if (COLOR->WTF_BG_WHITE) - { - contrast1 = 0.2f; - contrast2 = 0.8f; - } - - if (height < LAY_FFT_HEIGHT * contrast1) - { - if (!COLOR->WTF_BG_WHITE) - { - red = (uint_fast8_t)(height * 255 / (LAY_FFT_HEIGHT * contrast1)); - green = (uint_fast8_t)(height * 255 / (LAY_FFT_HEIGHT * contrast1)); - blue = 0; - } - else - { - red = 255; - green = 255; - blue = 255 - (uint_fast8_t)(height * 255 / (LAY_FFT_HEIGHT * contrast1)); - } - } - else - { - green = 255; - blue = 0; - red = (uint_fast8_t)(255 - (height - (LAY_FFT_HEIGHT * (contrast1))) * 255 / ((LAY_FFT_HEIGHT - (LAY_FFT_HEIGHT * (contrast1))) * (contrast1 + contrast2))); - if (COLOR->WTF_BG_WHITE) - { - green = red; - } - } - return rgb888torgb565(red, green, blue); - } - //black -> red - if (TRX.FFT_Color == 4) - { - // r g b - // 0 0 0 - // 255 0 0 - - if (height <= LAY_FFT_HEIGHT) - { - red = (uint_fast8_t)(height * 255 / (LAY_FFT_HEIGHT)); - if (COLOR->WTF_BG_WHITE) - { - green -= (uint_fast8_t)(height * 255 / (LAY_FFT_HEIGHT)); - blue -= (uint_fast8_t)(height * 255 / (LAY_FFT_HEIGHT)); - red = 255; - } - } - return rgb888torgb565(red, green, blue); - } - //black -> green - if (TRX.FFT_Color == 5) - { - // r g b - // 0 0 0 - // 0 255 0 - - if (height <= LAY_FFT_HEIGHT) - { - green = (uint_fast8_t)(height * 255 / (LAY_FFT_HEIGHT)); - if (COLOR->WTF_BG_WHITE) - { - green = 255; - blue -= (uint_fast8_t)(height * 255 / (LAY_FFT_HEIGHT)); - red -= (uint_fast8_t)(height * 255 / (LAY_FFT_HEIGHT)); - } - } - return rgb888torgb565(red, green, blue); - } - //black -> blue - if (TRX.FFT_Color == 6) - { - // r g b - // 0 0 0 - // 0 0 255 - - if (height <= LAY_FFT_HEIGHT) - { - blue = (uint_fast8_t)(height * 255 / (LAY_FFT_HEIGHT)); - if (COLOR->WTF_BG_WHITE) - { - green -= (uint_fast8_t)(height * 255 / (LAY_FFT_HEIGHT)); - blue = 255; - red -= (uint_fast8_t)(height * 255 / (LAY_FFT_HEIGHT)); - } - } - return rgb888torgb565(red, green, blue); - } - //black -> white - if (TRX.FFT_Color == 7) - { - // r g b - // 0 0 0 - // 255 255 255 - - if (height <= LAY_FFT_HEIGHT) - { - red = (uint_fast8_t)(height * 255 / (LAY_FFT_HEIGHT)); - green = red; - blue = red; - if (COLOR->WTF_BG_WHITE) - { - red = 255 - red; - green = 255 - green; - blue = 255 - blue; - } - } - return rgb888torgb565(red, green, blue); - } - //unknown - return COLOR_WHITE; -} - -static uint16_t getBGColor(uint_fast8_t height) // Get FFT background gradient -{ - float32_t fftheight = LAY_FFT_HEIGHT; - float32_t step_red = (float32_t)(COLOR->FFT_GRADIENT_END_R - COLOR->FFT_GRADIENT_START_R) / fftheight; - float32_t step_green = (float32_t)(COLOR->FFT_GRADIENT_END_G - COLOR->FFT_GRADIENT_START_G) / fftheight; - float32_t step_blue = (float32_t)(COLOR->FFT_GRADIENT_END_B - COLOR->FFT_GRADIENT_START_B) / fftheight; - - uint_fast8_t red = (uint_fast8_t)(COLOR->FFT_GRADIENT_START_R + (float32_t)height * step_red); - uint_fast8_t green = (uint_fast8_t)(COLOR->FFT_GRADIENT_START_G + (float32_t)height * step_green); - uint_fast8_t blue = (uint_fast8_t)(COLOR->FFT_GRADIENT_START_B + (float32_t)height * step_blue); - - return rgb888torgb565(red, green, blue); -} - -// prepare the color palette -static void FFT_fill_color_palette(void) // Fill FFT Color Gradient On Initialization -{ - for (uint_fast8_t i = 0; i <= LAY_FFT_HEIGHT; i++) - { - palette_fft[i] = getFFTColor(LAY_FFT_HEIGHT - i); - palette_bg_gradient[i] = getBGColor(LAY_FFT_HEIGHT - i); - palette_bw_fft_colors[i] = addColor(palette_fft[i], FFT_BW_BRIGHTNESS, FFT_BW_BRIGHTNESS, FFT_BW_BRIGHTNESS); - palette_bw_bg_colors[i] = addColor(palette_bg_gradient[i], FFT_BW_BRIGHTNESS, FFT_BW_BRIGHTNESS, FFT_BW_BRIGHTNESS); - } -} - -// reset FFT -void FFT_Reset(void) // clear the FFT -{ - FFT_new_buffer_ready = false; - memset(FFTInput_I_A, 0x00, sizeof FFTInput_I_A); - memset(FFTInput_Q_A, 0x00, sizeof FFTInput_Q_A); - memset(FFTInput_I_B, 0x00, sizeof FFTInput_I_B); - memset(FFTInput_Q_B, 0x00, sizeof FFTInput_Q_B); - memset(FFTInputCharge, 0x00, sizeof FFTInputCharge); - memset(FFTInput, 0x00, sizeof FFTInput); - memset(FFTOutput_mean, 0x00, sizeof FFTOutput_mean); - FFT_buff_index = 0; -} - -static inline int32_t getFreqPositionOnFFT(uint32_t freq) -{ - int32_t pos = (int32_t)((float32_t)LAY_FFT_PRINT_SIZE / 2 + (float32_t)((float32_t)freq - (float32_t)CurrentVFO()->Freq) / FFT_HZ_IN_PIXEL * (float32_t)TRX.FFT_Zoom); - if (pos < 0 || pos >= LAY_FFT_PRINT_SIZE) - return -1; - return pos; -} - -uint32_t getFreqOnFFTPosition(uint16_t position) -{ - return (uint32_t)((int32_t)CurrentVFO()->Freq + (int32_t)(-((float32_t)LAY_FFT_PRINT_SIZE * (FFT_HZ_IN_PIXEL / (float32_t)TRX.FFT_Zoom) / 2.0f) + (float32_t)position * (FFT_HZ_IN_PIXEL / (float32_t)TRX.FFT_Zoom))); -} diff --git a/Src/fft.h b/Src/fft.h deleted file mode 100644 index cc4d57d..0000000 --- a/Src/fft.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef FFT_h -#define FFT_h - -#include "stm32f4xx_hal.h" -#include -#include -#include "functions.h" -#include "wm8731.h" -#include "screen_layout.h" - -#define FFT_SIZE 512 // specify the size of the calculated FFT -#define FFT_USEFUL_SIZE 512 // size after FFT cropping -#define FFT_DOUBLE_SIZE_BUFFER (FFT_SIZE * 2) // Buffer size for FFT calculation -#define FFT_MIN 4.0f // MIN threshold of FFT signal -#define FFT_TARGET 6.0f // average threshold of the FFT signal -#define FFT_COMPRESS_INTERVAL 0.9f // compress interval of the FFT signal -#define FFT_MAX 8.0f // MAX FFT signal threshold -#define FFT_STEP_COEFF 10.0f // step coefficient for auto-calibration of the FFT signal (more - slower) -#define FFT_HZ_IN_PIXEL (float32_t)((float32_t)TRX_SAMPLERATE / (float32_t)LAY_FFT_PRINT_SIZE) // hertz per pixel -#define FFT_BW_BRIGHTNESS 10 // pixel brightness on bw bar -#define FFT_SCALE_LINES_BRIGHTNESS 0.4f // pixel brightness on scale lines -#define FFT_MAX_GRID_NUMBER 13 -#define ZOOMFFT_DECIM_STAGES 5 -#define FFT_DMA_MAX_BLOCK 65000 - -// Public variables -extern uint32_t FFT_buff_index; -extern bool FFT_buff_current; -extern bool FFT_need_fft; -extern bool FFT_new_buffer_ready; -extern float32_t FFTInput_I_A[FFT_SIZE]; -extern float32_t FFTInput_Q_A[FFT_SIZE]; -extern float32_t FFTInput_I_B[FFT_SIZE]; -extern float32_t FFTInput_Q_B[FFT_SIZE]; -extern uint16_t FFT_FPS; -extern uint16_t FFT_FPS_Last; - -// Public methods -extern void FFT_Init(void); // FFT initialization -extern void FFT_PreInit(void); // FFT precalculation -extern void FFT_bufferPrepare(void); // FFT Buffer process -extern void FFT_Reset(void); // reset FFT -extern void FFT_doFFT(void); // FFT calculation -extern bool FFT_printFFT(void); // FFT output -extern void FFT_afterPrintFFT(void); // FFT output after callback -extern void FFT_printWaterfallDMA(void); // waterfall output -extern uint32_t getFreqOnFFTPosition(uint16_t position); //get frequency from pixel X position - -#endif diff --git a/Src/fonts.h b/Src/fonts.h deleted file mode 100644 index 0ad88f5..0000000 --- a/Src/fonts.h +++ /dev/null @@ -1,10242 +0,0 @@ -#ifndef _FONTS_H_ -#define _FONTS_H_ - -#include -#include "stm32f4xx_hal.h" -#include "lcd_driver.h" -#include -#include - -/*FONTS: -FreeSans7pt7b -FreeSans9pt7b -FreeSans12pt7b -FreeSans18pt7b -FreeSans24pt7b -FreeSans32pt7b -FreeSans36pt7b -Quito36pt7b -Quito32pt7b -*/ - -static const uint8_t FreeSans12pt7bBitmaps[] = { - 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xCF, 0x3C, 0xF3, 0x8A, 0x20, 0x06, 0x30, - 0x31, 0x03, 0x18, 0x18, 0xC7, 0xFF, 0xBF, 0xFC, 0x31, 0x03, 0x18, 0x18, - 0xC7, 0xFF, 0xBF, 0xFC, 0x31, 0x01, 0x18, 0x18, 0xC0, 0xC6, 0x06, 0x30, - 0x04, 0x03, 0xE1, 0xFF, 0x72, 0x6C, 0x47, 0x88, 0xF1, 0x07, 0x20, 0x7E, - 0x03, 0xF0, 0x17, 0x02, 0x3C, 0x47, 0x88, 0xF1, 0x1B, 0x26, 0x7F, 0xC3, - 0xE0, 0x10, 0x02, 0x00, 0x00, 0x06, 0x03, 0xC0, 0x40, 0x7E, 0x0C, 0x0E, - 0x70, 0x80, 0xC3, 0x18, 0x0C, 0x31, 0x00, 0xE7, 0x30, 0x07, 0xE6, 0x00, - 0x3C, 0x40, 0x00, 0x0C, 0x7C, 0x00, 0x8F, 0xE0, 0x19, 0xC7, 0x01, 0x18, - 0x30, 0x31, 0x83, 0x02, 0x1C, 0x70, 0x40, 0xFE, 0x04, 0x07, 0xC0, 0x0F, - 0x00, 0x7E, 0x03, 0x9C, 0x0C, 0x30, 0x30, 0xC0, 0xE7, 0x01, 0xF8, 0x03, - 0x80, 0x3E, 0x01, 0xCC, 0x6E, 0x19, 0xB0, 0x7C, 0xC0, 0xF3, 0x03, 0xCE, - 0x1F, 0x9F, 0xE6, 0x1E, 0x1C, 0xFF, 0xA0, 0x08, 0x8C, 0x66, 0x31, 0x98, - 0xC6, 0x31, 0x8C, 0x63, 0x08, 0x63, 0x08, 0x61, 0x0C, 0x20, 0x82, 0x18, - 0xC3, 0x18, 0xC3, 0x18, 0xC6, 0x31, 0x8C, 0x62, 0x31, 0x88, 0xC4, 0x62, - 0x00, 0x10, 0x23, 0x5B, 0xE3, 0x8D, 0x91, 0x00, 0x0C, 0x03, 0x00, 0xC0, - 0x30, 0xFF, 0xFF, 0xF0, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0xF5, 0x60, - 0xFF, 0xF0, 0xF0, 0x02, 0x0C, 0x10, 0x20, 0xC1, 0x02, 0x0C, 0x10, 0x20, - 0xC1, 0x02, 0x0C, 0x10, 0x20, 0xC1, 0x00, 0x1F, 0x07, 0xF1, 0xC7, 0x30, - 0x6E, 0x0F, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, - 0x0E, 0xC1, 0x9C, 0x71, 0xFC, 0x1F, 0x00, 0x08, 0xCF, 0xFF, 0x8C, 0x63, - 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x18, 0x1F, 0x0F, 0xF9, 0x87, 0x60, 0x7C, - 0x06, 0x00, 0xC0, 0x18, 0x07, 0x01, 0xC0, 0xF0, 0x78, 0x1C, 0x06, 0x00, - 0x80, 0x30, 0x07, 0xFF, 0xFF, 0xE0, 0x3F, 0x0F, 0xF3, 0x87, 0x60, 0x6C, - 0x0C, 0x01, 0x80, 0x70, 0x7C, 0x0F, 0x80, 0x18, 0x01, 0x80, 0x3C, 0x07, - 0x80, 0xD8, 0x73, 0xFC, 0x1F, 0x00, 0x01, 0x80, 0x70, 0x0E, 0x03, 0xC0, - 0xD8, 0x1B, 0x06, 0x61, 0x8C, 0x21, 0x8C, 0x33, 0x06, 0x7F, 0xFF, 0xFE, - 0x03, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x3F, 0xCF, 0xF9, 0x80, 0x30, 0x06, - 0x00, 0xDE, 0x1F, 0xE7, 0x0E, 0x00, 0xE0, 0x0C, 0x01, 0x80, 0x30, 0x07, - 0x81, 0xF8, 0x73, 0xFC, 0x1F, 0x00, 0x0F, 0x07, 0xF9, 0xC3, 0x30, 0x74, - 0x01, 0x80, 0x33, 0xC7, 0xFE, 0xF0, 0xDC, 0x1F, 0x01, 0xE0, 0x3C, 0x06, - 0xC1, 0xDC, 0x71, 0xFC, 0x1F, 0x00, 0xFF, 0xFF, 0xFC, 0x01, 0x00, 0x60, - 0x18, 0x02, 0x00, 0xC0, 0x30, 0x06, 0x01, 0x80, 0x30, 0x04, 0x01, 0x80, - 0x30, 0x06, 0x01, 0x80, 0x30, 0x00, 0x1F, 0x07, 0xF1, 0xC7, 0x30, 0x66, - 0x0C, 0xC1, 0x8C, 0x61, 0xFC, 0x3F, 0x8E, 0x3B, 0x01, 0xE0, 0x3C, 0x07, - 0x80, 0xD8, 0x31, 0xFC, 0x1F, 0x00, 0x1F, 0x07, 0xF1, 0xC7, 0x70, 0x6C, - 0x07, 0x80, 0xF0, 0x1E, 0x07, 0x61, 0xEF, 0xFC, 0x79, 0x80, 0x30, 0x05, - 0x81, 0x98, 0x73, 0xFC, 0x1E, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0xF0, 0x00, - 0x0F, 0x56, 0x00, 0x00, 0x07, 0x01, 0xE0, 0xF8, 0x3C, 0x0F, 0x00, 0xE0, - 0x07, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x01, 0xFF, 0xFF, 0xFF, 0x00, - 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x0E, 0x00, 0x78, 0x01, 0xF0, 0x07, - 0xC0, 0x0F, 0x00, 0x70, 0x1E, 0x0F, 0x03, 0xC0, 0xF0, 0x08, 0x00, 0x1F, - 0x1F, 0xEE, 0x1B, 0x03, 0xC0, 0xC0, 0x30, 0x0C, 0x06, 0x03, 0x81, 0xC0, - 0xE0, 0x30, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x03, 0x00, 0x00, 0xFE, - 0x00, 0x0F, 0xFE, 0x00, 0xF0, 0x3E, 0x07, 0x00, 0x3C, 0x38, 0x00, 0x30, - 0xC1, 0xE0, 0x66, 0x0F, 0xD9, 0xD8, 0x61, 0xC3, 0xC3, 0x07, 0x0F, 0x1C, - 0x1C, 0x3C, 0x60, 0x60, 0xF1, 0x81, 0x83, 0xC6, 0x06, 0x1B, 0x18, 0x38, - 0xEE, 0x71, 0xE7, 0x18, 0xFD, 0xF8, 0x71, 0xE7, 0xC0, 0xE0, 0x00, 0x01, - 0xE0, 0x00, 0x01, 0xFF, 0xC0, 0x01, 0xFC, 0x00, 0x03, 0xC0, 0x03, 0xC0, - 0x03, 0xC0, 0x07, 0xE0, 0x06, 0x60, 0x06, 0x60, 0x0E, 0x70, 0x0C, 0x30, - 0x0C, 0x30, 0x1C, 0x38, 0x18, 0x18, 0x1F, 0xF8, 0x3F, 0xFC, 0x30, 0x1C, - 0x30, 0x0C, 0x70, 0x0E, 0x60, 0x06, 0x60, 0x06, 0xFF, 0xC7, 0xFF, 0x30, - 0x19, 0x80, 0x6C, 0x03, 0x60, 0x1B, 0x00, 0xD8, 0x0C, 0xFF, 0xC7, 0xFF, - 0x30, 0x0D, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x06, 0xFF, 0xF7, - 0xFE, 0x00, 0x07, 0xE0, 0x3F, 0xF0, 0xE0, 0x73, 0x80, 0x66, 0x00, 0x6C, - 0x00, 0x30, 0x00, 0x60, 0x00, 0xC0, 0x01, 0x80, 0x03, 0x00, 0x06, 0x00, - 0x06, 0x00, 0x6C, 0x00, 0xDC, 0x03, 0x1E, 0x0E, 0x1F, 0xF8, 0x0F, 0xC0, - 0xFF, 0x83, 0xFF, 0x8C, 0x07, 0x30, 0x0E, 0xC0, 0x1B, 0x00, 0x7C, 0x00, - 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x1F, 0x00, - 0x6C, 0x03, 0xB0, 0x1C, 0xFF, 0xE3, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xC0, - 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0xFF, 0xEF, 0xFE, 0xC0, - 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x00, 0xFF, 0xDF, - 0xFB, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x00, 0xC0, 0x18, 0x00, - 0x07, 0xF0, 0x1F, 0xFC, 0x3C, 0x1E, 0x70, 0x06, 0x60, 0x03, 0xE0, 0x00, - 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x7F, 0xC0, 0x7F, 0xC0, 0x03, 0xC0, 0x03, - 0x60, 0x03, 0x60, 0x07, 0x30, 0x0F, 0x3C, 0x1F, 0x1F, 0xFB, 0x07, 0xE1, - 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, - 0x03, 0xFF, 0xFF, 0xFF, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, - 0x78, 0x03, 0xC0, 0x1E, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x01, - 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0x60, - 0x3C, 0x1E, 0x0F, 0x07, 0xC7, 0x7F, 0x1F, 0x00, 0xC0, 0x3B, 0x01, 0xCC, - 0x0E, 0x30, 0x70, 0xC3, 0x83, 0x1C, 0x0C, 0xE0, 0x33, 0x80, 0xDE, 0x03, - 0xDC, 0x0E, 0x38, 0x30, 0x60, 0xC1, 0xC3, 0x03, 0x8C, 0x06, 0x30, 0x1C, - 0xC0, 0x3B, 0x00, 0x60, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, - 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, - 0xFF, 0xFF, 0xF0, 0xE0, 0x07, 0xE0, 0x07, 0xF0, 0x0F, 0xF0, 0x0F, 0xD0, - 0x0F, 0xD8, 0x1B, 0xD8, 0x1B, 0xD8, 0x1B, 0xCC, 0x33, 0xCC, 0x33, 0xCC, - 0x33, 0xC6, 0x63, 0xC6, 0x63, 0xC6, 0x63, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, - 0xC3, 0xC1, 0x83, 0xE0, 0x1F, 0x00, 0xFC, 0x07, 0xE0, 0x3D, 0x81, 0xEE, - 0x0F, 0x30, 0x79, 0xC3, 0xC6, 0x1E, 0x18, 0xF0, 0xE7, 0x83, 0x3C, 0x1D, - 0xE0, 0x6F, 0x01, 0xF8, 0x0F, 0xC0, 0x3E, 0x01, 0xC0, 0x03, 0xE0, 0x0F, - 0xFC, 0x0F, 0x07, 0x86, 0x00, 0xC6, 0x00, 0x33, 0x00, 0x1B, 0x00, 0x07, - 0x80, 0x03, 0xC0, 0x01, 0xE0, 0x00, 0xF0, 0x00, 0x78, 0x00, 0x36, 0x00, - 0x33, 0x00, 0x18, 0xC0, 0x18, 0x78, 0x3C, 0x1F, 0xFC, 0x03, 0xF8, 0x00, - 0xFF, 0x8F, 0xFE, 0xC0, 0x6C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x07, - 0xFF, 0xEF, 0xFC, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, - 0xC0, 0x0C, 0x00, 0x03, 0xE0, 0x0F, 0xFC, 0x0F, 0x07, 0x86, 0x00, 0xC6, - 0x00, 0x33, 0x00, 0x1B, 0x00, 0x07, 0x80, 0x03, 0xC0, 0x01, 0xE0, 0x00, - 0xF0, 0x00, 0x78, 0x00, 0x36, 0x00, 0x33, 0x01, 0x98, 0xC0, 0xFC, 0x78, - 0x3C, 0x1F, 0xFF, 0x03, 0xF9, 0x80, 0x00, 0x40, 0xFF, 0xC3, 0xFF, 0xCC, - 0x03, 0xB0, 0x06, 0xC0, 0x1B, 0x00, 0x6C, 0x01, 0xB0, 0x0C, 0xFF, 0xE3, - 0xFF, 0xCC, 0x03, 0xB0, 0x06, 0xC0, 0x1B, 0x00, 0x6C, 0x01, 0xB0, 0x06, - 0xC0, 0x1B, 0x00, 0x70, 0x0F, 0xE0, 0x7F, 0xC3, 0x83, 0x9C, 0x07, 0x60, - 0x0D, 0x80, 0x06, 0x00, 0x1E, 0x00, 0x3F, 0x80, 0x3F, 0xC0, 0x0F, 0x80, - 0x07, 0xC0, 0x0F, 0x00, 0x3E, 0x00, 0xDE, 0x0E, 0x3F, 0xF0, 0x3F, 0x80, - 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, - 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, - 0x06, 0x00, 0x60, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, - 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x01, - 0xE0, 0x0F, 0x80, 0xEE, 0x0E, 0x3F, 0xE0, 0x7C, 0x00, 0x60, 0x06, 0xC0, - 0x1D, 0xC0, 0x31, 0x80, 0x63, 0x01, 0xC7, 0x03, 0x06, 0x06, 0x0C, 0x1C, - 0x1C, 0x30, 0x18, 0x60, 0x31, 0xC0, 0x73, 0x00, 0x66, 0x00, 0xDC, 0x01, - 0xF0, 0x01, 0xE0, 0x03, 0xC0, 0x07, 0x00, 0xE0, 0x30, 0x1D, 0x80, 0xE0, - 0x76, 0x07, 0x81, 0xD8, 0x1E, 0x06, 0x70, 0x7C, 0x18, 0xC1, 0xB0, 0xE3, - 0x0C, 0xC3, 0x8C, 0x33, 0x0C, 0x38, 0xC6, 0x30, 0x67, 0x18, 0xC1, 0x98, - 0x67, 0x06, 0x61, 0xD8, 0x1D, 0x83, 0x60, 0x3C, 0x0D, 0x80, 0xF0, 0x3E, - 0x03, 0xC0, 0x70, 0x0F, 0x01, 0xC0, 0x18, 0x07, 0x00, 0x70, 0x0E, 0x60, - 0x38, 0xE0, 0x60, 0xE1, 0xC0, 0xC3, 0x01, 0xCC, 0x01, 0xF8, 0x01, 0xE0, - 0x03, 0x80, 0x07, 0x80, 0x1F, 0x00, 0x33, 0x00, 0xE7, 0x03, 0x86, 0x06, - 0x0E, 0x1C, 0x0E, 0x70, 0x0C, 0xC0, 0x1C, 0x60, 0x06, 0x70, 0x0E, 0x30, - 0x1C, 0x38, 0x18, 0x1C, 0x38, 0x0C, 0x30, 0x0E, 0x70, 0x06, 0x60, 0x03, - 0xC0, 0x03, 0xC0, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, - 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0xFF, 0xFF, 0xFF, 0xC0, 0x0E, - 0x00, 0xE0, 0x0E, 0x00, 0x60, 0x07, 0x00, 0x70, 0x07, 0x00, 0x30, 0x03, - 0x80, 0x38, 0x03, 0x80, 0x18, 0x01, 0xC0, 0x1C, 0x00, 0xFF, 0xFF, 0xFF, - 0xC0, 0xFF, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCF, - 0xF0, 0x81, 0x81, 0x02, 0x06, 0x04, 0x08, 0x18, 0x10, 0x20, 0x60, 0x40, - 0x81, 0x81, 0x02, 0x06, 0x04, 0xFF, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, - 0x33, 0x33, 0x33, 0x3F, 0xF0, 0x0C, 0x0E, 0x05, 0x86, 0xC3, 0x21, 0x19, - 0x8C, 0x83, 0xC1, 0x80, 0xFF, 0xFE, 0xE3, 0x8C, 0x30, 0x3F, 0x07, 0xF8, - 0xE1, 0xCC, 0x0C, 0x00, 0xC0, 0x1C, 0x3F, 0xCF, 0x8C, 0xC0, 0xCC, 0x0C, - 0xE3, 0xC7, 0xEF, 0x3C, 0x70, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0xC0, - 0x0C, 0xF8, 0xDF, 0xCF, 0x0E, 0xE0, 0x7C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, - 0x3C, 0x03, 0xE0, 0x6F, 0x0E, 0xDF, 0xCC, 0xF8, 0x1F, 0x0F, 0xE7, 0x1B, - 0x83, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x38, 0x37, 0x1C, 0xFE, 0x1F, - 0x00, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x3C, 0xCF, 0xFB, 0x8F, - 0xE0, 0xF8, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF8, 0x3B, 0x8F, 0x3F, - 0x63, 0xCC, 0x1F, 0x07, 0xF1, 0xC7, 0x70, 0x3C, 0x07, 0xFF, 0xFF, 0xFE, - 0x00, 0xC0, 0x1C, 0x0D, 0xC3, 0x1F, 0xE1, 0xF0, 0x3B, 0xD8, 0xC6, 0x7F, - 0xEC, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x00, 0x1E, 0x67, 0xFD, 0xC7, - 0xF0, 0x7C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x7C, 0x1D, 0xC7, 0x9F, - 0xB1, 0xE6, 0x00, 0xC0, 0x3E, 0x0E, 0x7F, 0xC7, 0xE0, 0xC0, 0x30, 0x0C, - 0x03, 0x00, 0xC0, 0x33, 0xCD, 0xFB, 0xC7, 0xE0, 0xF0, 0x3C, 0x0F, 0x03, - 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x30, 0xF0, 0x3F, 0xFF, 0xFF, - 0xF0, 0x33, 0x00, 0x03, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, - 0xE0, 0xC0, 0x18, 0x03, 0x00, 0x60, 0x0C, 0x01, 0x83, 0x30, 0xC6, 0x30, - 0xCC, 0x1B, 0x83, 0xF0, 0x77, 0x0C, 0x61, 0x8E, 0x30, 0xE6, 0x0C, 0xC1, - 0xD8, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xCF, 0x1F, 0x6F, 0xDF, 0xFC, - 0x78, 0xFC, 0x18, 0x3C, 0x0C, 0x1E, 0x06, 0x0F, 0x03, 0x07, 0x81, 0x83, - 0xC0, 0xC1, 0xE0, 0x60, 0xF0, 0x30, 0x78, 0x18, 0x3C, 0x0C, 0x18, 0xCF, - 0x37, 0xEF, 0x1F, 0x83, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, - 0x0F, 0x03, 0xC0, 0xC0, 0x1F, 0x07, 0xF1, 0xC7, 0x70, 0x7C, 0x07, 0x80, - 0xF0, 0x1E, 0x03, 0xC0, 0x7C, 0x1D, 0xC7, 0x1F, 0xC1, 0xF0, 0xCF, 0x8D, - 0xFC, 0xF0, 0xEE, 0x06, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3E, - 0x07, 0xF0, 0xEF, 0xFC, 0xCF, 0x8C, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x00, - 0x1E, 0x67, 0xFD, 0xC7, 0xF0, 0x7C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, - 0x7C, 0x1D, 0xC7, 0x9F, 0xF1, 0xE6, 0x00, 0xC0, 0x18, 0x03, 0x00, 0x60, - 0xCF, 0x7F, 0x38, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC0, 0x3E, 0x1F, - 0xEE, 0x1B, 0x00, 0xC0, 0x3C, 0x07, 0xF0, 0x3E, 0x01, 0xF0, 0x3E, 0x1D, - 0xFE, 0x3E, 0x00, 0x63, 0x19, 0xFF, 0xB1, 0x8C, 0x63, 0x18, 0xC6, 0x31, - 0xE7, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, - 0xF0, 0x7E, 0x3D, 0xFB, 0x3C, 0xC0, 0xE0, 0x66, 0x06, 0x60, 0x67, 0x0C, - 0x30, 0xC3, 0x0C, 0x39, 0x81, 0x98, 0x19, 0x81, 0xF0, 0x0F, 0x00, 0xE0, - 0x0E, 0x00, 0xC1, 0xC1, 0xB0, 0xE1, 0xD8, 0x70, 0xCC, 0x2C, 0x66, 0x36, - 0x31, 0x9B, 0x18, 0xCD, 0x98, 0x64, 0x6C, 0x16, 0x36, 0x0F, 0x1A, 0x07, - 0x8F, 0x03, 0x83, 0x80, 0xC1, 0xC0, 0x60, 0xEE, 0x18, 0xC6, 0x0C, 0xC1, - 0xF0, 0x1C, 0x01, 0x80, 0x78, 0x1B, 0x03, 0x30, 0xC7, 0x30, 0x66, 0x06, - 0xE0, 0x6C, 0x0D, 0x83, 0x38, 0x63, 0x0C, 0x63, 0x0E, 0x60, 0xCC, 0x1B, - 0x03, 0x60, 0x3C, 0x07, 0x00, 0xE0, 0x18, 0x03, 0x00, 0xE0, 0x78, 0x0E, - 0x00, 0xFF, 0xFF, 0xF0, 0x18, 0x0C, 0x07, 0x03, 0x81, 0xC0, 0x60, 0x30, - 0x18, 0x0E, 0x03, 0xFF, 0xFF, 0xC0, 0x19, 0xCC, 0x63, 0x18, 0xC6, 0x31, - 0x99, 0x86, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x1C, 0x60, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFC, 0xC7, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x0C, 0x33, 0x31, - 0x8C, 0x63, 0x18, 0xC6, 0x73, 0x00, 0x70, 0x3E, 0x09, 0xE4, 0x1F, 0x03, - 0x80}; - -static const GFXglyph FreeSans12pt7bGlyphs[] = { - {0, 0, 0, 6, 0, 1}, // 0x20 ' ' - {0, 2, 18, 8, 3, -17}, // 0x21 '!' - {5, 6, 6, 8, 1, -16}, // 0x22 '"' - {10, 13, 16, 13, 0, -15}, // 0x23 '#' - {36, 11, 20, 13, 1, -17}, // 0x24 '$' - {64, 20, 17, 21, 1, -16}, // 0x25 '%' - {107, 14, 17, 16, 1, -16}, // 0x26 '&' - {137, 2, 6, 5, 1, -16}, // 0x27 ''' - {139, 5, 23, 8, 2, -17}, // 0x28 '(' - {154, 5, 23, 8, 1, -17}, // 0x29 ')' - {169, 7, 7, 9, 1, -17}, // 0x2A '*' - {176, 10, 11, 14, 2, -10}, // 0x2B '+' - {190, 2, 6, 7, 2, -1}, // 0x2C ',' - {192, 6, 2, 8, 1, -7}, // 0x2D '-' - {194, 2, 2, 6, 2, -1}, // 0x2E '.' - {195, 7, 18, 7, 0, -17}, // 0x2F '/' - {211, 11, 17, 13, 1, -16}, // 0x30 '0' - {235, 5, 17, 13, 3, -16}, // 0x31 '1' - {246, 11, 17, 13, 1, -16}, // 0x32 '2' - {270, 11, 17, 13, 1, -16}, // 0x33 '3' - {294, 11, 17, 13, 1, -16}, // 0x34 '4' - {318, 11, 17, 13, 1, -16}, // 0x35 '5' - {342, 11, 17, 13, 1, -16}, // 0x36 '6' - {366, 11, 17, 13, 1, -16}, // 0x37 '7' - {390, 11, 17, 13, 1, -16}, // 0x38 '8' - {414, 11, 17, 13, 1, -16}, // 0x39 '9' - {438, 2, 13, 6, 2, -12}, // 0x3A ':' - {442, 2, 16, 6, 2, -11}, // 0x3B ';' - {446, 12, 12, 14, 1, -11}, // 0x3C '<' - {464, 12, 6, 14, 1, -8}, // 0x3D '=' - {473, 12, 12, 14, 1, -11}, // 0x3E '>' - {491, 10, 18, 13, 2, -17}, // 0x3F '?' - {514, 22, 21, 24, 1, -17}, // 0x40 '@' - {572, 16, 18, 16, 0, -17}, // 0x41 'A' - {608, 13, 18, 16, 2, -17}, // 0x42 'B' - {638, 15, 18, 17, 1, -17}, // 0x43 'C' - {672, 14, 18, 17, 2, -17}, // 0x44 'D' - {704, 12, 18, 15, 2, -17}, // 0x45 'E' - {731, 11, 18, 14, 2, -17}, // 0x46 'F' - {756, 16, 18, 18, 1, -17}, // 0x47 'G' - {792, 13, 18, 17, 2, -17}, // 0x48 'H' - {822, 2, 18, 7, 2, -17}, // 0x49 'I' - {827, 9, 18, 13, 1, -17}, // 0x4A 'J' - {848, 14, 18, 16, 2, -17}, // 0x4B 'K' - {880, 10, 18, 14, 2, -17}, // 0x4C 'L' - {903, 16, 18, 20, 2, -17}, // 0x4D 'M' - {939, 13, 18, 18, 2, -17}, // 0x4E 'N' - {969, 17, 18, 19, 1, -17}, // 0x4F 'O' - {1008, 12, 18, 16, 2, -17}, // 0x50 'P' - {1035, 17, 19, 19, 1, -17}, // 0x51 'Q' - {1076, 14, 18, 17, 2, -17}, // 0x52 'R' - {1108, 14, 18, 16, 1, -17}, // 0x53 'S' - {1140, 12, 18, 15, 1, -17}, // 0x54 'T' - {1167, 13, 18, 17, 2, -17}, // 0x55 'U' - {1197, 15, 18, 15, 0, -17}, // 0x56 'V' - {1231, 22, 18, 22, 0, -17}, // 0x57 'W' - {1281, 15, 18, 16, 0, -17}, // 0x58 'X' - {1315, 16, 18, 16, 0, -17}, // 0x59 'Y' - {1351, 13, 18, 15, 1, -17}, // 0x5A 'Z' - {1381, 4, 23, 7, 2, -17}, // 0x5B '[' - {1393, 7, 18, 7, 0, -17}, // 0x5C '\' - {1409, 4, 23, 7, 1, -17}, // 0x5D ']' - {1421, 9, 9, 11, 1, -16}, // 0x5E '^' - {1432, 15, 1, 13, -1, 4}, // 0x5F '_' - {1434, 5, 4, 6, 1, -17}, // 0x60 '`' - {1437, 12, 13, 13, 1, -12}, // 0x61 'a' - {1457, 12, 18, 13, 1, -17}, // 0x62 'b' - {1484, 10, 13, 12, 1, -12}, // 0x63 'c' - {1501, 11, 18, 13, 1, -17}, // 0x64 'd' - {1526, 11, 13, 13, 1, -12}, // 0x65 'e' - {1544, 5, 18, 7, 1, -17}, // 0x66 'f' - {1556, 11, 18, 13, 1, -12}, // 0x67 'g' - {1581, 10, 18, 13, 1, -17}, // 0x68 'h' - {1604, 2, 18, 5, 2, -17}, // 0x69 'i' - {1609, 4, 23, 6, 0, -17}, // 0x6A 'j' - {1621, 11, 18, 12, 1, -17}, // 0x6B 'k' - {1646, 2, 18, 5, 1, -17}, // 0x6C 'l' - {1651, 17, 13, 19, 1, -12}, // 0x6D 'm' - {1679, 10, 13, 13, 1, -12}, // 0x6E 'n' - {1696, 11, 13, 13, 1, -12}, // 0x6F 'o' - {1714, 12, 17, 13, 1, -12}, // 0x70 'p' - {1740, 11, 17, 13, 1, -12}, // 0x71 'q' - {1764, 6, 13, 8, 1, -12}, // 0x72 'r' - {1774, 10, 13, 12, 1, -12}, // 0x73 's' - {1791, 5, 16, 7, 1, -15}, // 0x74 't' - {1801, 10, 13, 13, 1, -12}, // 0x75 'u' - {1818, 12, 13, 12, 0, -12}, // 0x76 'v' - {1838, 17, 13, 17, 0, -12}, // 0x77 'w' - {1866, 11, 13, 11, 0, -12}, // 0x78 'x' - {1884, 11, 18, 11, 0, -12}, // 0x79 'y' - {1909, 10, 13, 12, 1, -12}, // 0x7A 'z' - {1926, 5, 23, 8, 1, -17}, // 0x7B '{' - {1941, 2, 23, 6, 2, -17}, // 0x7C '|' - {1947, 5, 23, 8, 2, -17}, // 0x7D '}' - {1962, 10, 5, 12, 1, -10}}; // 0x7E '~' - -static const GFXfont FreeSans12pt7b = { - (const uint8_t *)FreeSans12pt7bBitmaps, - (const GFXglyph *)FreeSans12pt7bGlyphs, - 0x20, 0x7E, 29}; - -static const uint8_t FreeSans18pt7bBitmaps[] = { - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE9, 0x20, 0x3F, 0xFC, 0xE3, 0xF1, - 0xF8, 0xFC, 0x7E, 0x3F, 0x1F, 0x8E, 0x82, 0x41, 0x00, 0x01, 0xC3, 0x80, - 0x38, 0x70, 0x06, 0x0E, 0x00, 0xC1, 0x80, 0x38, 0x70, 0x07, 0x0E, 0x0F, - 0xFF, 0xF9, 0xFF, 0xFF, 0x3F, 0xFF, 0xE0, 0xE1, 0xC0, 0x1C, 0x38, 0x03, - 0x87, 0x00, 0x70, 0xE0, 0x0C, 0x18, 0x3F, 0xFF, 0xF7, 0xFF, 0xFE, 0xFF, - 0xFF, 0xC1, 0xC3, 0x80, 0x30, 0x60, 0x06, 0x0C, 0x01, 0xC3, 0x80, 0x38, - 0x70, 0x07, 0x0E, 0x00, 0xC1, 0x80, 0x03, 0x00, 0x0F, 0xC0, 0x3F, 0xF0, - 0x3F, 0xF8, 0x7B, 0x3C, 0xF3, 0x1C, 0xE3, 0x0E, 0xE3, 0x0E, 0xE3, 0x0E, - 0xE3, 0x00, 0xE3, 0x00, 0xF3, 0x00, 0x7B, 0x00, 0x7F, 0x80, 0x1F, 0xF0, - 0x07, 0xFC, 0x03, 0x7E, 0x03, 0x0F, 0x03, 0x07, 0xE3, 0x07, 0xE3, 0x07, - 0xE3, 0x07, 0xE3, 0x0F, 0x73, 0x3E, 0x7F, 0xFC, 0x3F, 0xF8, 0x0F, 0xE0, - 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x78, 0x00, - 0xE0, 0x0F, 0xF0, 0x06, 0x00, 0xFF, 0xC0, 0x70, 0x07, 0x0E, 0x07, 0x00, - 0x70, 0x38, 0x38, 0x03, 0x00, 0xC3, 0x80, 0x18, 0x06, 0x1C, 0x00, 0xE0, - 0x71, 0xC0, 0x03, 0x87, 0x8C, 0x00, 0x1F, 0xF8, 0xE0, 0x00, 0x7F, 0x86, - 0x00, 0x01, 0xF8, 0x70, 0x00, 0x00, 0x03, 0x03, 0xC0, 0x00, 0x38, 0x7F, - 0x80, 0x01, 0x87, 0xFE, 0x00, 0x1C, 0x38, 0x70, 0x00, 0xC3, 0x81, 0xC0, - 0x0E, 0x18, 0x06, 0x00, 0xE0, 0xC0, 0x30, 0x07, 0x07, 0x03, 0x80, 0x70, - 0x1C, 0x38, 0x03, 0x80, 0xFF, 0xC0, 0x38, 0x03, 0xFC, 0x01, 0x80, 0x07, - 0x80, 0x01, 0xF0, 0x00, 0x7F, 0x80, 0x0F, 0xFC, 0x01, 0xE1, 0xE0, 0x1C, - 0x0E, 0x01, 0xC0, 0xE0, 0x1C, 0x0E, 0x01, 0xE1, 0xE0, 0x0E, 0x3C, 0x00, - 0x77, 0x80, 0x07, 0xF0, 0x00, 0x7C, 0x00, 0x0F, 0xE0, 0x03, 0xCF, 0x1C, - 0x78, 0x79, 0xC7, 0x03, 0xDC, 0xE0, 0x1F, 0x8E, 0x00, 0xF8, 0xE0, 0x0F, - 0x0E, 0x00, 0x70, 0xF0, 0x0F, 0x87, 0xC3, 0xFC, 0x7F, 0xFD, 0xC3, 0xFF, - 0x0E, 0x0F, 0xC0, 0xF0, 0xFF, 0xFF, 0xFA, 0x40, 0x06, 0x06, 0x0C, 0x0C, - 0x18, 0x18, 0x38, 0x30, 0x70, 0x70, 0x70, 0x60, 0xE0, 0xE0, 0xE0, 0xE0, - 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x60, 0x70, 0x70, 0x70, 0x30, 0x38, 0x18, - 0x18, 0x0C, 0x0C, 0x06, 0x03, 0xC0, 0x60, 0x30, 0x30, 0x38, 0x18, 0x1C, - 0x0C, 0x0E, 0x0E, 0x0E, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, - 0x07, 0x07, 0x06, 0x0E, 0x0E, 0x0E, 0x0C, 0x1C, 0x18, 0x38, 0x30, 0x30, - 0x60, 0xC0, 0x0C, 0x03, 0x00, 0xC3, 0xB7, 0xFF, 0xC7, 0x81, 0xE0, 0xEC, - 0x73, 0x88, 0x40, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, - 0x80, 0x01, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x80, 0x01, - 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0xFF, - 0xF6, 0xDA, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0xC0, 0x30, 0x18, - 0x06, 0x01, 0x80, 0xC0, 0x30, 0x0C, 0x06, 0x01, 0x80, 0x60, 0x30, 0x0C, - 0x03, 0x00, 0xC0, 0x60, 0x18, 0x06, 0x03, 0x00, 0xC0, 0x30, 0x18, 0x06, - 0x01, 0x80, 0xC0, 0x30, 0x00, 0x07, 0xE0, 0x0F, 0xF8, 0x1F, 0xFC, 0x3C, - 0x3C, 0x78, 0x1E, 0x70, 0x0E, 0x70, 0x0E, 0xE0, 0x07, 0xE0, 0x07, 0xE0, - 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, - 0x07, 0xE0, 0x07, 0xE0, 0x0F, 0x70, 0x0E, 0x70, 0x0E, 0x78, 0x1E, 0x3C, - 0x3C, 0x1F, 0xF8, 0x1F, 0xF0, 0x07, 0xE0, 0x03, 0x03, 0x07, 0x0F, 0x3F, - 0xFF, 0xFF, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, - 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0xE0, 0x1F, 0xF8, - 0x3F, 0xFC, 0x7C, 0x3E, 0x70, 0x0F, 0xF0, 0x0F, 0xE0, 0x07, 0xE0, 0x07, - 0x00, 0x07, 0x00, 0x07, 0x00, 0x0F, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0xF8, - 0x03, 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0x3C, 0x00, 0x38, 0x00, 0x70, 0x00, - 0x60, 0x00, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xF0, - 0x07, 0xFE, 0x07, 0xFF, 0x87, 0x83, 0xC3, 0x80, 0xF3, 0x80, 0x39, 0xC0, - 0x1C, 0xE0, 0x0E, 0x00, 0x07, 0x00, 0x0F, 0x00, 0x7F, 0x00, 0x3F, 0x00, - 0x1F, 0xE0, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x07, 0x00, 0x03, 0xF0, 0x01, - 0xF8, 0x00, 0xFE, 0x00, 0x77, 0x00, 0x73, 0xE0, 0xF8, 0xFF, 0xF8, 0x3F, - 0xF8, 0x07, 0xF0, 0x00, 0x00, 0x38, 0x00, 0x38, 0x00, 0x78, 0x00, 0xF8, - 0x00, 0xF8, 0x01, 0xF8, 0x03, 0xB8, 0x03, 0x38, 0x07, 0x38, 0x0E, 0x38, - 0x1C, 0x38, 0x18, 0x38, 0x38, 0x38, 0x70, 0x38, 0x60, 0x38, 0xE0, 0x38, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, - 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x1F, 0xFF, 0x0F, 0xFF, 0x8F, 0xFF, - 0xC7, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, 0x00, 0x70, 0x00, 0x39, - 0xF0, 0x3F, 0xFE, 0x1F, 0xFF, 0x8F, 0x83, 0xE7, 0x00, 0xF0, 0x00, 0x3C, - 0x00, 0x0E, 0x00, 0x07, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xFC, 0x00, - 0xEF, 0x00, 0x73, 0xC0, 0xF0, 0xFF, 0xF8, 0x3F, 0xF8, 0x07, 0xE0, 0x00, - 0x03, 0xE0, 0x0F, 0xF8, 0x1F, 0xFC, 0x3C, 0x1E, 0x38, 0x0E, 0x70, 0x0E, - 0x70, 0x00, 0x60, 0x00, 0xE0, 0x00, 0xE3, 0xE0, 0xEF, 0xF8, 0xFF, 0xFC, - 0xFC, 0x3E, 0xF0, 0x0E, 0xF0, 0x0F, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, - 0x60, 0x07, 0x70, 0x0F, 0x70, 0x0E, 0x3C, 0x3E, 0x3F, 0xFC, 0x1F, 0xF8, - 0x07, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x06, 0x00, 0x0E, - 0x00, 0x1C, 0x00, 0x18, 0x00, 0x38, 0x00, 0x70, 0x00, 0x60, 0x00, 0xE0, - 0x00, 0xC0, 0x01, 0xC0, 0x01, 0x80, 0x03, 0x80, 0x03, 0x80, 0x07, 0x00, - 0x07, 0x00, 0x07, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0C, 0x00, - 0x1C, 0x00, 0x1C, 0x00, 0x07, 0xF0, 0x0F, 0xFE, 0x0F, 0xFF, 0x87, 0x83, - 0xC7, 0x80, 0xF3, 0x80, 0x39, 0xC0, 0x1C, 0xE0, 0x0E, 0x78, 0x0F, 0x1E, - 0x0F, 0x07, 0xFF, 0x01, 0xFF, 0x03, 0xFF, 0xE3, 0xE0, 0xF9, 0xC0, 0x1D, - 0xC0, 0x0F, 0xE0, 0x03, 0xF0, 0x01, 0xF8, 0x00, 0xFC, 0x00, 0xF7, 0x00, - 0x73, 0xE0, 0xF8, 0xFF, 0xF8, 0x3F, 0xF8, 0x07, 0xF0, 0x00, 0x07, 0xE0, - 0x1F, 0xF8, 0x3F, 0xFC, 0x7C, 0x3C, 0x70, 0x0E, 0xF0, 0x0E, 0xE0, 0x06, - 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x0F, 0x70, 0x0F, 0x78, 0x3F, - 0x3F, 0xFF, 0x1F, 0xF7, 0x07, 0xC7, 0x00, 0x07, 0x00, 0x06, 0x00, 0x0E, - 0x70, 0x0E, 0x70, 0x1C, 0x78, 0x3C, 0x3F, 0xF8, 0x1F, 0xF0, 0x07, 0xC0, - 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x80, 0xFF, 0xF0, 0x00, 0x00, - 0x00, 0x07, 0xFF, 0xB6, 0xD6, 0x00, 0x00, 0x80, 0x03, 0xC0, 0x07, 0xE0, - 0x0F, 0xC0, 0x3F, 0x80, 0x7E, 0x00, 0xFC, 0x01, 0xF0, 0x00, 0xE0, 0x00, - 0x7C, 0x00, 0x1F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x80, 0x07, 0xF0, 0x00, - 0x7E, 0x00, 0x0F, 0x00, 0x01, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x80, 0x80, 0x00, 0x70, 0x00, 0x3E, 0x00, 0x0F, 0xE0, 0x00, 0xFC, - 0x00, 0x1F, 0xC0, 0x03, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0x80, 0x0F, 0xC0, - 0x1F, 0x80, 0x7F, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x01, 0xC0, 0x00, - 0x80, 0x00, 0x00, 0x0F, 0xC0, 0x7F, 0xE1, 0xFF, 0xE3, 0xC3, 0xEF, 0x01, - 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0x00, 0x0E, 0x00, 0x38, 0x00, 0xF0, - 0x07, 0xC0, 0x1F, 0x00, 0x7C, 0x00, 0xE0, 0x03, 0xC0, 0x07, 0x00, 0x0E, - 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xC0, 0x03, 0x80, - 0x07, 0x00, 0x0E, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0x00, - 0x00, 0xFF, 0xFF, 0xC0, 0x01, 0xF8, 0x0F, 0xE0, 0x03, 0xE0, 0x01, 0xF0, - 0x07, 0x80, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0x3C, 0x1E, 0x00, 0x00, 0x1E, - 0x3C, 0x03, 0xE0, 0x1E, 0x38, 0x0F, 0xF3, 0x8E, 0x78, 0x1E, 0x3F, 0x0F, - 0x70, 0x38, 0x1F, 0x07, 0x70, 0x78, 0x0F, 0x07, 0xE0, 0x70, 0x0E, 0x07, - 0xE0, 0x70, 0x0E, 0x07, 0xE0, 0xE0, 0x0E, 0x07, 0xE0, 0xE0, 0x1C, 0x07, - 0xE0, 0xE0, 0x1C, 0x0E, 0xE0, 0xE0, 0x1C, 0x0E, 0xE0, 0xE0, 0x38, 0x1C, - 0xF0, 0x70, 0x78, 0x3C, 0x70, 0x78, 0xFC, 0x78, 0x78, 0x3F, 0xDF, 0xF0, - 0x38, 0x1F, 0x0F, 0xC0, 0x3C, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, - 0x0F, 0x80, 0x00, 0x00, 0x07, 0xF0, 0x0E, 0x00, 0x01, 0xFF, 0xFE, 0x00, - 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0xF8, 0x00, 0x03, - 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x7F, 0x00, 0x01, 0xDC, 0x00, 0x07, 0x78, - 0x00, 0x3C, 0xE0, 0x00, 0xE3, 0x80, 0x03, 0x8F, 0x00, 0x1E, 0x1C, 0x00, - 0x70, 0x70, 0x01, 0xC1, 0xE0, 0x0E, 0x03, 0x80, 0x38, 0x0E, 0x00, 0xE0, - 0x3C, 0x07, 0xFF, 0xF0, 0x1F, 0xFF, 0xE0, 0xFF, 0xFF, 0x83, 0xC0, 0x0E, - 0x0E, 0x00, 0x3C, 0x78, 0x00, 0xF1, 0xE0, 0x01, 0xC7, 0x00, 0x07, 0xBC, - 0x00, 0x1E, 0xF0, 0x00, 0x3B, 0x80, 0x00, 0xF0, 0xFF, 0xFC, 0x1F, 0xFF, - 0xE3, 0xFF, 0xFE, 0x70, 0x03, 0xCE, 0x00, 0x3D, 0xC0, 0x03, 0xB8, 0x00, - 0x77, 0x00, 0x0E, 0xE0, 0x01, 0xDC, 0x00, 0x73, 0x80, 0x1E, 0x7F, 0xFF, - 0x8F, 0xFF, 0xF1, 0xFF, 0xFF, 0x38, 0x00, 0xF7, 0x00, 0x0E, 0xE0, 0x00, - 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x03, - 0xF8, 0x00, 0xF7, 0xFF, 0xFC, 0xFF, 0xFF, 0x1F, 0xFF, 0x80, 0x00, 0xFF, - 0x00, 0x0F, 0xFF, 0x00, 0xFF, 0xFE, 0x07, 0xE0, 0x7C, 0x3E, 0x00, 0x78, - 0xF0, 0x00, 0xE7, 0x80, 0x03, 0xDC, 0x00, 0x07, 0x70, 0x00, 0x03, 0x80, - 0x00, 0x0E, 0x00, 0x00, 0x38, 0x00, 0x00, 0xE0, 0x00, 0x03, 0x80, 0x00, - 0x0E, 0x00, 0x00, 0x38, 0x00, 0x00, 0xE0, 0x00, 0x1D, 0xC0, 0x00, 0x77, - 0x00, 0x03, 0xDE, 0x00, 0x0E, 0x3C, 0x00, 0x78, 0xF8, 0x03, 0xC1, 0xF8, - 0x1F, 0x03, 0xFF, 0xF8, 0x03, 0xFF, 0xC0, 0x03, 0xF8, 0x00, 0xFF, 0xF8, - 0x0F, 0xFF, 0xE0, 0xFF, 0xFF, 0x0E, 0x00, 0xF8, 0xE0, 0x03, 0xCE, 0x00, - 0x1C, 0xE0, 0x00, 0xEE, 0x00, 0x0E, 0xE0, 0x00, 0xFE, 0x00, 0x07, 0xE0, - 0x00, 0x7E, 0x00, 0x07, 0xE0, 0x00, 0x7E, 0x00, 0x07, 0xE0, 0x00, 0x7E, - 0x00, 0x07, 0xE0, 0x00, 0x7E, 0x00, 0x0F, 0xE0, 0x00, 0xEE, 0x00, 0x0E, - 0xE0, 0x01, 0xEE, 0x00, 0x3C, 0xE0, 0x0F, 0x8F, 0xFF, 0xF0, 0xFF, 0xFE, - 0x0F, 0xFF, 0x80, 0xFF, 0xFF, 0xBF, 0xFF, 0xEF, 0xFF, 0xFB, 0x80, 0x00, - 0xE0, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x03, 0x80, 0x00, 0xE0, 0x00, 0x38, - 0x00, 0x0E, 0x00, 0x03, 0xFF, 0xFE, 0xFF, 0xFF, 0xBF, 0xFF, 0xEE, 0x00, - 0x03, 0x80, 0x00, 0xE0, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x03, 0x80, 0x00, - 0xE0, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x0E, 0x00, - 0x07, 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, 0x00, 0x70, 0x00, 0x38, - 0x00, 0x1F, 0xFF, 0xCF, 0xFF, 0xE7, 0xFF, 0xF3, 0x80, 0x01, 0xC0, 0x00, - 0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0E, 0x00, 0x07, 0x00, - 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7F, - 0x80, 0x03, 0xFF, 0xE0, 0x07, 0xFF, 0xF8, 0x0F, 0x80, 0xFC, 0x1E, 0x00, - 0x3E, 0x3C, 0x00, 0x0E, 0x78, 0x00, 0x0F, 0x70, 0x00, 0x07, 0x70, 0x00, - 0x00, 0xE0, 0x00, 0x00, 0xE0, 0x00, 0x00, 0xE0, 0x00, 0x00, 0xE0, 0x03, - 0xFF, 0xE0, 0x03, 0xFF, 0xE0, 0x03, 0xFF, 0xE0, 0x00, 0x07, 0xF0, 0x00, - 0x07, 0x70, 0x00, 0x07, 0x70, 0x00, 0x0F, 0x78, 0x00, 0x0F, 0x3C, 0x00, - 0x1F, 0x1E, 0x00, 0x3F, 0x0F, 0xC0, 0xF7, 0x07, 0xFF, 0xE7, 0x03, 0xFF, - 0xC3, 0x00, 0xFF, 0x03, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, - 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, - 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, - 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, - 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x1C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x1C, 0x00, 0x70, 0x01, 0xC0, 0x07, 0x00, - 0x1C, 0x00, 0x70, 0x01, 0xC0, 0x07, 0x00, 0x1C, 0x00, 0x70, 0x01, 0xC0, - 0x07, 0x00, 0x1C, 0x00, 0x70, 0x01, 0xC0, 0x07, 0x00, 0x1F, 0x80, 0x7E, - 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0xC0, 0xF7, 0x87, 0x9F, 0xFE, 0x3F, 0xF0, - 0x3F, 0x00, 0xE0, 0x01, 0xEE, 0x00, 0x3C, 0xE0, 0x07, 0x8E, 0x00, 0xF0, - 0xE0, 0x1E, 0x0E, 0x03, 0xE0, 0xE0, 0x7C, 0x0E, 0x0F, 0x80, 0xE1, 0xF0, - 0x0E, 0x1E, 0x00, 0xE3, 0xC0, 0x0E, 0x7C, 0x00, 0xEF, 0xE0, 0x0F, 0xCE, - 0x00, 0xF8, 0xF0, 0x0F, 0x07, 0x80, 0xE0, 0x3C, 0x0E, 0x03, 0xC0, 0xE0, - 0x1E, 0x0E, 0x00, 0xF0, 0xE0, 0x0F, 0x0E, 0x00, 0x78, 0xE0, 0x03, 0xCE, - 0x00, 0x3C, 0xE0, 0x01, 0xEE, 0x00, 0x0F, 0xE0, 0x01, 0xC0, 0x03, 0x80, - 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, 0x01, - 0xC0, 0x03, 0x80, 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x70, - 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x80, 0x07, 0x00, 0x0E, 0x00, 0x1C, 0x00, - 0x38, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF8, 0x00, 0x1F, 0xF8, - 0x00, 0x1F, 0xF8, 0x00, 0x1F, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x3F, 0xFC, - 0x00, 0x3F, 0xEE, 0x00, 0x77, 0xEE, 0x00, 0x77, 0xEE, 0x00, 0x77, 0xE7, - 0x00, 0xE7, 0xE7, 0x00, 0xE7, 0xE7, 0x00, 0xE7, 0xE3, 0x81, 0xC7, 0xE3, - 0x81, 0xC7, 0xE3, 0x81, 0xC7, 0xE1, 0xC3, 0x87, 0xE1, 0xC3, 0x87, 0xE1, - 0xC3, 0x87, 0xE0, 0xE7, 0x07, 0xE0, 0xE7, 0x07, 0xE0, 0xE7, 0x07, 0xE0, - 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x3C, 0x07, 0xE0, - 0x3C, 0x07, 0xF0, 0x00, 0x7F, 0x00, 0x07, 0xF8, 0x00, 0x7F, 0xC0, 0x07, - 0xFC, 0x00, 0x7F, 0xE0, 0x07, 0xEF, 0x00, 0x7E, 0x70, 0x07, 0xE7, 0x80, - 0x7E, 0x3C, 0x07, 0xE1, 0xC0, 0x7E, 0x1E, 0x07, 0xE0, 0xE0, 0x7E, 0x0F, - 0x07, 0xE0, 0x78, 0x7E, 0x03, 0x87, 0xE0, 0x3C, 0x7E, 0x01, 0xE7, 0xE0, - 0x0E, 0x7E, 0x00, 0xF7, 0xE0, 0x07, 0xFE, 0x00, 0x3F, 0xE0, 0x03, 0xFE, - 0x00, 0x1F, 0xE0, 0x01, 0xFE, 0x00, 0x0F, 0x00, 0x7F, 0x00, 0x01, 0xFF, - 0xF0, 0x01, 0xFF, 0xFC, 0x01, 0xF0, 0x1F, 0x01, 0xE0, 0x03, 0xC1, 0xE0, - 0x00, 0xF1, 0xE0, 0x00, 0x3C, 0xE0, 0x00, 0x0E, 0x70, 0x00, 0x07, 0x70, - 0x00, 0x03, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x0F, 0xC0, 0x00, 0x07, 0xE0, 0x00, 0x03, - 0xB8, 0x00, 0x03, 0x9C, 0x00, 0x01, 0xCF, 0x00, 0x01, 0xE3, 0xC0, 0x01, - 0xE0, 0xF0, 0x01, 0xE0, 0x3E, 0x03, 0xE0, 0x0F, 0xFF, 0xE0, 0x03, 0xFF, - 0xE0, 0x00, 0x3F, 0x80, 0x00, 0xFF, 0xFC, 0x3F, 0xFF, 0x8F, 0xFF, 0xF3, - 0x80, 0x3E, 0xE0, 0x03, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xE0, - 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x3F, 0x80, 0x1E, 0xFF, 0xFF, 0x3F, 0xFF, - 0x8F, 0xFF, 0xC3, 0x80, 0x00, 0xE0, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x03, - 0x80, 0x00, 0xE0, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x03, 0x80, 0x00, 0xE0, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x01, 0xFF, 0xF0, 0x01, 0xFF, - 0xFC, 0x01, 0xF0, 0x1F, 0x01, 0xE0, 0x03, 0xC1, 0xE0, 0x00, 0xF1, 0xE0, - 0x00, 0x3C, 0xE0, 0x00, 0x0E, 0x70, 0x00, 0x07, 0x70, 0x00, 0x01, 0xF8, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x1F, - 0x80, 0x00, 0x0F, 0xC0, 0x00, 0x07, 0xE0, 0x00, 0x07, 0xB8, 0x00, 0x03, - 0x9C, 0x00, 0x01, 0xCF, 0x00, 0x39, 0xE3, 0xC0, 0x1F, 0xE0, 0xF0, 0x07, - 0xE0, 0x3E, 0x03, 0xF0, 0x0F, 0xFF, 0xFC, 0x03, 0xFF, 0xEE, 0x00, 0x3F, - 0x83, 0x80, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x20, 0xFF, 0xFE, 0x0F, 0xFF, - 0xF8, 0xFF, 0xFF, 0xCE, 0x00, 0x3C, 0xE0, 0x01, 0xEE, 0x00, 0x0E, 0xE0, - 0x00, 0xEE, 0x00, 0x0E, 0xE0, 0x00, 0xEE, 0x00, 0x0E, 0xE0, 0x01, 0xCE, - 0x00, 0x3C, 0xFF, 0xFF, 0x8F, 0xFF, 0xF0, 0xFF, 0xFF, 0x8E, 0x00, 0x3C, - 0xE0, 0x01, 0xEE, 0x00, 0x0E, 0xE0, 0x00, 0xEE, 0x00, 0x0E, 0xE0, 0x00, - 0xEE, 0x00, 0x0E, 0xE0, 0x00, 0xEE, 0x00, 0x0E, 0xE0, 0x00, 0xFE, 0x00, - 0x0F, 0x03, 0xFC, 0x00, 0xFF, 0xF0, 0x1F, 0xFF, 0x83, 0xE0, 0x7C, 0x38, - 0x01, 0xE7, 0x00, 0x0E, 0x70, 0x00, 0xE7, 0x00, 0x00, 0x70, 0x00, 0x07, - 0x80, 0x00, 0x3E, 0x00, 0x01, 0xFE, 0x00, 0x0F, 0xFE, 0x00, 0x3F, 0xF8, - 0x00, 0x3F, 0xE0, 0x00, 0x3E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0xE0, 0x00, - 0x7E, 0x00, 0x07, 0xF0, 0x00, 0x77, 0x80, 0x0E, 0x7C, 0x03, 0xE3, 0xFF, - 0xFC, 0x1F, 0xFF, 0x80, 0x3F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x80, 0x70, 0x00, 0x0E, 0x00, 0x01, 0xC0, 0x00, 0x38, 0x00, 0x07, - 0x00, 0x00, 0xE0, 0x00, 0x1C, 0x00, 0x03, 0x80, 0x00, 0x70, 0x00, 0x0E, - 0x00, 0x01, 0xC0, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0xE0, 0x00, 0x1C, - 0x00, 0x03, 0x80, 0x00, 0x70, 0x00, 0x0E, 0x00, 0x01, 0xC0, 0x00, 0x38, - 0x00, 0x07, 0x00, 0x00, 0xE0, 0x00, 0x1C, 0x00, 0xE0, 0x00, 0xFC, 0x00, - 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, - 0x3F, 0x00, 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, - 0x7E, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x00, - 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7F, 0x00, 0x1E, 0xF0, 0x07, - 0x9F, 0x01, 0xF1, 0xFF, 0xFC, 0x1F, 0xFE, 0x00, 0x7F, 0x00, 0xE0, 0x00, - 0x7F, 0x80, 0x03, 0xFC, 0x00, 0x1C, 0xE0, 0x01, 0xE7, 0x80, 0x0F, 0x3C, - 0x00, 0x70, 0xE0, 0x07, 0x87, 0x80, 0x3C, 0x1C, 0x01, 0xC0, 0xE0, 0x0E, - 0x07, 0x80, 0xE0, 0x1C, 0x07, 0x00, 0xE0, 0x38, 0x07, 0x83, 0x80, 0x1C, - 0x1C, 0x00, 0xE0, 0xE0, 0x07, 0x8E, 0x00, 0x1C, 0x70, 0x00, 0xE3, 0x80, - 0x07, 0xB8, 0x00, 0x1D, 0xC0, 0x00, 0xEE, 0x00, 0x07, 0xE0, 0x00, 0x1F, - 0x00, 0x00, 0xF8, 0x00, 0x03, 0x80, 0x00, 0x70, 0x03, 0xC0, 0x0F, 0x70, - 0x03, 0xC0, 0x0F, 0x78, 0x03, 0xE0, 0x0F, 0x78, 0x03, 0xE0, 0x0E, 0x38, - 0x07, 0xE0, 0x0E, 0x38, 0x07, 0xF0, 0x1E, 0x3C, 0x07, 0x70, 0x1E, 0x3C, - 0x07, 0x70, 0x1C, 0x1C, 0x0E, 0x70, 0x1C, 0x1C, 0x0E, 0x38, 0x3C, 0x1C, - 0x0E, 0x38, 0x3C, 0x1E, 0x1E, 0x38, 0x38, 0x0E, 0x1C, 0x38, 0x38, 0x0E, - 0x1C, 0x1C, 0x38, 0x0E, 0x1C, 0x1C, 0x78, 0x0F, 0x3C, 0x1C, 0x70, 0x07, - 0x38, 0x0E, 0x70, 0x07, 0x38, 0x0E, 0x70, 0x07, 0x38, 0x0E, 0x70, 0x07, - 0x70, 0x0E, 0xE0, 0x03, 0xF0, 0x07, 0xE0, 0x03, 0xF0, 0x07, 0xE0, 0x03, - 0xF0, 0x07, 0xE0, 0x03, 0xE0, 0x03, 0xC0, 0x01, 0xE0, 0x03, 0xC0, 0x01, - 0xE0, 0x03, 0xC0, 0xF0, 0x00, 0x7B, 0xC0, 0x07, 0x8F, 0x00, 0x38, 0x78, - 0x03, 0xC1, 0xE0, 0x3C, 0x07, 0x81, 0xC0, 0x3C, 0x1E, 0x00, 0xF1, 0xE0, - 0x03, 0x8E, 0x00, 0x1E, 0xF0, 0x00, 0x7F, 0x00, 0x01, 0xF0, 0x00, 0x0F, - 0x80, 0x00, 0x7C, 0x00, 0x07, 0xF0, 0x00, 0x3B, 0x80, 0x03, 0xDE, 0x00, - 0x3C, 0x78, 0x01, 0xC1, 0xC0, 0x1E, 0x0F, 0x01, 0xE0, 0x3C, 0x0E, 0x00, - 0xE0, 0xF0, 0x07, 0x8F, 0x00, 0x1E, 0x70, 0x00, 0xF7, 0x80, 0x03, 0xC0, - 0xF0, 0x00, 0x3C, 0xF0, 0x00, 0x78, 0xF0, 0x01, 0xE1, 0xE0, 0x03, 0x81, - 0xE0, 0x0F, 0x01, 0xC0, 0x1C, 0x03, 0xC0, 0x78, 0x03, 0xC1, 0xE0, 0x07, - 0x83, 0x80, 0x07, 0x8F, 0x00, 0x07, 0x1C, 0x00, 0x0F, 0x78, 0x00, 0x0E, - 0xE0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x38, - 0x00, 0x00, 0x70, 0x00, 0x00, 0xE0, 0x00, 0x01, 0xC0, 0x00, 0x03, 0x80, - 0x00, 0x07, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x70, 0x00, 0x7F, 0xFF, 0xEF, 0xFF, 0xFD, 0xFF, 0xFF, 0x80, 0x00, - 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x80, 0x01, 0xE0, 0x00, 0x78, 0x00, 0x1E, - 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0xC0, - 0x00, 0x78, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0x7C, 0x00, - 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x3E, 0x00, 0x07, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xF8, 0xE3, 0x8E, 0x38, 0xE3, - 0x8E, 0x38, 0xE3, 0x8E, 0x38, 0xE3, 0x8E, 0x38, 0xE3, 0x8E, 0x38, 0xE3, - 0x8E, 0x38, 0xE3, 0x8F, 0xFF, 0xFC, 0xC0, 0x30, 0x06, 0x01, 0x80, 0x60, - 0x0C, 0x03, 0x00, 0xC0, 0x18, 0x06, 0x01, 0x80, 0x20, 0x0C, 0x03, 0x00, - 0x40, 0x18, 0x06, 0x01, 0x80, 0x30, 0x0C, 0x03, 0x00, 0x60, 0x18, 0x06, - 0x00, 0xC0, 0x30, 0xFF, 0xFF, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, - 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, - 0x1C, 0x7F, 0xFF, 0xFC, 0x07, 0x00, 0x78, 0x03, 0xC0, 0x3F, 0x01, 0xD8, - 0x0C, 0xE0, 0xE3, 0x06, 0x1C, 0x70, 0xE3, 0x83, 0x18, 0x1D, 0xC0, 0x6C, - 0x03, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xF0, 0xF0, 0xE0, 0xE0, - 0xE0, 0x07, 0xF0, 0x0F, 0xFC, 0x0F, 0xFF, 0x0F, 0x03, 0xC7, 0x00, 0xE0, - 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, 0xFE, 0x0F, 0xFF, 0x1F, 0xF3, - 0x9F, 0x01, 0xCF, 0x00, 0xE7, 0x00, 0x73, 0x80, 0x79, 0xE0, 0xFC, 0x7F, - 0xEF, 0x9F, 0xE3, 0xC7, 0xE1, 0xE0, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE3, 0xE0, 0xEF, 0xF8, - 0xFF, 0xFC, 0xFC, 0x3E, 0xF8, 0x1E, 0xF0, 0x0E, 0xE0, 0x0F, 0xE0, 0x07, - 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xF0, 0x0E, - 0xF8, 0x1E, 0xFC, 0x3C, 0xEF, 0xFC, 0xEF, 0xF8, 0xE3, 0xE0, 0x07, 0xF0, - 0x1F, 0xF8, 0x3F, 0xFC, 0x3C, 0x1E, 0x78, 0x0E, 0x70, 0x07, 0xE0, 0x00, - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x07, - 0x70, 0x07, 0x78, 0x0E, 0x7C, 0x1E, 0x3F, 0xFC, 0x1F, 0xF8, 0x07, 0xE0, - 0x00, 0x03, 0x80, 0x01, 0xC0, 0x00, 0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, - 0x1C, 0x00, 0x0E, 0x0F, 0xC7, 0x1F, 0xFB, 0x9F, 0xFF, 0xDF, 0x07, 0xEF, - 0x01, 0xF7, 0x00, 0x7F, 0x80, 0x3F, 0x80, 0x0F, 0xC0, 0x07, 0xE0, 0x03, - 0xF0, 0x01, 0xF8, 0x00, 0xFC, 0x00, 0x77, 0x00, 0x7B, 0xC0, 0x7D, 0xF0, - 0x7E, 0x7F, 0xFB, 0x1F, 0xF9, 0x83, 0xF0, 0xC0, 0x07, 0xE0, 0x1F, 0xF8, - 0x3F, 0xFC, 0x7C, 0x1E, 0x70, 0x0E, 0x60, 0x06, 0xE0, 0x07, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0x70, 0x07, - 0x78, 0x0E, 0x3C, 0x1E, 0x3F, 0xFC, 0x1F, 0xF8, 0x07, 0xE0, 0x0E, 0x3C, - 0xF9, 0xC3, 0x87, 0x0E, 0x7F, 0xFF, 0xFC, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, - 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0x07, 0xC7, 0x1F, - 0xF7, 0x3F, 0xFF, 0x3C, 0x3F, 0x78, 0x0F, 0x70, 0x0F, 0xE0, 0x07, 0xE0, - 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0x70, - 0x0F, 0x78, 0x0F, 0x7C, 0x3F, 0x3F, 0xF7, 0x1F, 0xE7, 0x07, 0xC7, 0x00, - 0x07, 0x00, 0x07, 0x00, 0x0E, 0x70, 0x0E, 0x78, 0x1E, 0x3F, 0xFC, 0x1F, - 0xF8, 0x07, 0xE0, 0xE0, 0x01, 0xC0, 0x03, 0x80, 0x07, 0x00, 0x0E, 0x00, - 0x1C, 0x00, 0x38, 0x00, 0x71, 0xF8, 0xE7, 0xFD, 0xDF, 0xFB, 0xF0, 0xFF, - 0xC0, 0xFF, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, 0xC0, - 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, - 0xE0, 0x0F, 0xC0, 0x1C, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFC, 0x1C, 0x71, 0xC7, 0x00, 0x00, 0x07, 0x1C, 0x71, 0xC7, 0x1C, - 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, - 0x73, 0xFF, 0xFB, 0xC0, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x3C, 0xE0, 0x78, 0xE0, 0xF0, - 0xE1, 0xE0, 0xE3, 0xC0, 0xE7, 0x80, 0xEF, 0x00, 0xEF, 0x80, 0xFF, 0x80, - 0xFB, 0xC0, 0xF1, 0xE0, 0xE0, 0xE0, 0xE0, 0xF0, 0xE0, 0x70, 0xE0, 0x78, - 0xE0, 0x3C, 0xE0, 0x1C, 0xE0, 0x1E, 0xE0, 0x0E, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xE3, 0xE0, 0xF8, 0xE7, 0xF1, 0xFE, - 0xEF, 0xFB, 0xFE, 0xF8, 0x7F, 0x0F, 0xF0, 0x3E, 0x07, 0xF0, 0x1C, 0x07, - 0xE0, 0x1C, 0x07, 0xE0, 0x1C, 0x07, 0xE0, 0x1C, 0x07, 0xE0, 0x1C, 0x07, - 0xE0, 0x1C, 0x07, 0xE0, 0x1C, 0x07, 0xE0, 0x1C, 0x07, 0xE0, 0x1C, 0x07, - 0xE0, 0x1C, 0x07, 0xE0, 0x1C, 0x07, 0xE0, 0x1C, 0x07, 0xE0, 0x1C, 0x07, - 0xE0, 0x1C, 0x07, 0xE3, 0xF1, 0xCF, 0xFB, 0xBF, 0xF7, 0xE1, 0xFF, 0x81, - 0xFE, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, - 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, 0xC0, - 0x1F, 0x80, 0x38, 0x07, 0xF0, 0x0F, 0xFE, 0x0F, 0xFF, 0x87, 0x83, 0xC7, - 0x80, 0xF3, 0x80, 0x3B, 0x80, 0x1F, 0xC0, 0x07, 0xE0, 0x03, 0xF0, 0x01, - 0xF8, 0x00, 0xFC, 0x00, 0x7E, 0x00, 0x3B, 0x80, 0x39, 0xE0, 0x3C, 0x78, - 0x3C, 0x3F, 0xFE, 0x0F, 0xFE, 0x01, 0xFC, 0x00, 0xE3, 0xE0, 0xE7, 0xF8, - 0xEF, 0xFC, 0xFC, 0x3E, 0xF8, 0x1E, 0xF0, 0x0E, 0xE0, 0x0F, 0xE0, 0x07, - 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xF0, 0x0E, - 0xF8, 0x1E, 0xFC, 0x3E, 0xFF, 0xFC, 0xEF, 0xF8, 0xE3, 0xE0, 0xE0, 0x00, - 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0x07, 0xE1, - 0x8F, 0xFC, 0xCF, 0xFF, 0x67, 0x83, 0xF7, 0x80, 0xFB, 0x80, 0x3F, 0xC0, - 0x1F, 0xC0, 0x07, 0xE0, 0x03, 0xF0, 0x01, 0xF8, 0x00, 0xFC, 0x00, 0x7E, - 0x00, 0x3B, 0x80, 0x3D, 0xE0, 0x3E, 0xF8, 0x3F, 0x3F, 0xFF, 0x8F, 0xFD, - 0xC1, 0xF8, 0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x0E, 0x00, - 0x07, 0x00, 0x03, 0x80, 0xE3, 0xF7, 0xFB, 0xFF, 0x8F, 0x07, 0x83, 0x81, - 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, - 0x38, 0x00, 0x0F, 0xC0, 0xFF, 0x87, 0xFF, 0x3C, 0x1E, 0xE0, 0x3B, 0x80, - 0x0E, 0x00, 0x3C, 0x00, 0x7F, 0x00, 0xFF, 0x80, 0xFF, 0x80, 0x7F, 0x00, - 0x3F, 0x80, 0x7E, 0x01, 0xFC, 0x1F, 0x7F, 0xF8, 0xFF, 0xC1, 0xFC, 0x00, - 0x38, 0x70, 0xE1, 0xCF, 0xFF, 0xFF, 0x9C, 0x38, 0x70, 0xE1, 0xC3, 0x87, - 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0xE7, 0xC7, 0x80, 0xE0, 0x0F, 0xC0, - 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, - 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x03, 0xFC, - 0x0F, 0xFC, 0x3F, 0x7F, 0xEE, 0xFF, 0x9C, 0x7E, 0x38, 0x70, 0x03, 0xB8, - 0x03, 0x9C, 0x01, 0xC7, 0x00, 0xE3, 0x80, 0xE1, 0xC0, 0x70, 0x70, 0x38, - 0x38, 0x38, 0x1C, 0x1C, 0x07, 0x0E, 0x03, 0x8E, 0x01, 0xC7, 0x00, 0x77, - 0x00, 0x3B, 0x80, 0x1D, 0xC0, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, - 0x70, 0x00, 0xF0, 0x1C, 0x03, 0xB8, 0x1F, 0x03, 0xDC, 0x0F, 0x81, 0xCE, - 0x07, 0xC0, 0xE7, 0x83, 0xE0, 0x71, 0xC3, 0xB8, 0x70, 0xE1, 0xDC, 0x38, - 0x70, 0xEE, 0x1C, 0x1C, 0x63, 0x0E, 0x0E, 0x71, 0xCE, 0x07, 0x38, 0xE7, - 0x03, 0x9C, 0x73, 0x80, 0xEC, 0x19, 0x80, 0x7E, 0x0F, 0xC0, 0x3F, 0x07, - 0xE0, 0x0F, 0x83, 0xF0, 0x07, 0x80, 0xF0, 0x03, 0xC0, 0x78, 0x01, 0xE0, - 0x3C, 0x00, 0x70, 0x07, 0x38, 0x0E, 0x3C, 0x1C, 0x1C, 0x1C, 0x0E, 0x38, - 0x0F, 0x70, 0x07, 0x70, 0x03, 0xE0, 0x03, 0xC0, 0x01, 0xC0, 0x03, 0xE0, - 0x07, 0xE0, 0x07, 0x70, 0x0E, 0x78, 0x1E, 0x38, 0x1C, 0x1C, 0x38, 0x1E, - 0x78, 0x0E, 0x70, 0x07, 0x70, 0x07, 0x38, 0x03, 0x9C, 0x01, 0xC7, 0x01, - 0xC3, 0x80, 0xE1, 0xC0, 0x70, 0x70, 0x70, 0x38, 0x38, 0x1C, 0x3C, 0x07, - 0x1C, 0x03, 0x8E, 0x01, 0xCE, 0x00, 0x77, 0x00, 0x3B, 0x80, 0x1F, 0x80, - 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xE0, 0x00, 0x70, 0x00, 0x38, 0x00, 0x38, - 0x00, 0x1C, 0x00, 0x1E, 0x00, 0x0E, 0x00, 0x3F, 0x00, 0x1F, 0x00, 0x0F, - 0x00, 0x00, 0x7F, 0xFC, 0xFF, 0xF9, 0xFF, 0xF0, 0x00, 0xE0, 0x03, 0x80, - 0x0E, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x1C, 0x00, 0x70, - 0x01, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xF8, 0x07, 0x0F, 0x1F, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, - 0x1C, 0x1C, 0x1C, 0x1C, 0x38, 0xF8, 0xE0, 0xF8, 0x38, 0x1C, 0x1C, 0x1C, - 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1F, 0x0F, 0x07, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xE0, 0xF0, 0xF8, 0x38, - 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x1C, 0x1F, - 0x07, 0x1F, 0x1C, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, - 0x38, 0x38, 0xF8, 0xF0, 0xE0, 0x38, 0x00, 0xFC, 0x03, 0xFC, 0x1F, 0x3E, - 0x3C, 0x1F, 0xE0, 0x1F, 0x80, 0x1E, 0x00}; - -static const GFXglyph FreeSans18pt7bGlyphs[] = { - {0, 0, 0, 9, 0, 1}, // 0x20 ' ' - {0, 3, 26, 12, 4, -25}, // 0x21 '!' - {10, 9, 9, 12, 1, -24}, // 0x22 '"' - {21, 19, 24, 19, 0, -23}, // 0x23 '#' - {78, 16, 30, 19, 2, -26}, // 0x24 '$' - {138, 29, 25, 31, 1, -24}, // 0x25 '%' - {229, 20, 25, 23, 2, -24}, // 0x26 '&' - {292, 3, 9, 7, 2, -24}, // 0x27 ''' - {296, 8, 33, 12, 3, -25}, // 0x28 '(' - {329, 8, 33, 12, 1, -25}, // 0x29 ')' - {362, 10, 10, 14, 2, -25}, // 0x2A '*' - {375, 16, 16, 20, 2, -15}, // 0x2B '+' - {407, 3, 9, 10, 3, -3}, // 0x2C ',' - {411, 8, 3, 12, 2, -10}, // 0x2D '-' - {414, 3, 4, 9, 3, -3}, // 0x2E '.' - {416, 10, 26, 10, 0, -25}, // 0x2F '/' - {449, 16, 25, 19, 2, -24}, // 0x30 '0' - {499, 8, 25, 19, 4, -24}, // 0x31 '1' - {524, 16, 25, 19, 2, -24}, // 0x32 '2' - {574, 17, 25, 19, 1, -24}, // 0x33 '3' - {628, 16, 25, 19, 1, -24}, // 0x34 '4' - {678, 17, 25, 19, 1, -24}, // 0x35 '5' - {732, 16, 25, 19, 2, -24}, // 0x36 '6' - {782, 16, 25, 19, 2, -24}, // 0x37 '7' - {832, 17, 25, 19, 1, -24}, // 0x38 '8' - {886, 16, 25, 19, 1, -24}, // 0x39 '9' - {936, 3, 19, 9, 3, -18}, // 0x3A ':' - {944, 3, 24, 9, 3, -18}, // 0x3B ';' - {953, 17, 17, 20, 2, -16}, // 0x3C '<' - {990, 17, 9, 20, 2, -12}, // 0x3D '=' - {1010, 17, 17, 20, 2, -16}, // 0x3E '>' - {1047, 15, 26, 19, 3, -25}, // 0x3F '?' - {1096, 32, 31, 36, 1, -25}, // 0x40 '@' - {1220, 22, 26, 23, 1, -25}, // 0x41 'A' - {1292, 19, 26, 23, 3, -25}, // 0x42 'B' - {1354, 22, 26, 25, 1, -25}, // 0x43 'C' - {1426, 20, 26, 24, 3, -25}, // 0x44 'D' - {1491, 18, 26, 22, 3, -25}, // 0x45 'E' - {1550, 17, 26, 21, 3, -25}, // 0x46 'F' - {1606, 24, 26, 27, 1, -25}, // 0x47 'G' - {1684, 19, 26, 25, 3, -25}, // 0x48 'H' - {1746, 3, 26, 10, 4, -25}, // 0x49 'I' - {1756, 14, 26, 18, 1, -25}, // 0x4A 'J' - {1802, 20, 26, 24, 3, -25}, // 0x4B 'K' - {1867, 15, 26, 20, 3, -25}, // 0x4C 'L' - {1916, 24, 26, 30, 3, -25}, // 0x4D 'M' - {1994, 20, 26, 26, 3, -25}, // 0x4E 'N' - {2059, 25, 26, 27, 1, -25}, // 0x4F 'O' - {2141, 18, 26, 23, 3, -25}, // 0x50 'P' - {2200, 25, 28, 27, 1, -25}, // 0x51 'Q' - {2288, 20, 26, 25, 3, -25}, // 0x52 'R' - {2353, 20, 26, 23, 1, -25}, // 0x53 'S' - {2418, 19, 26, 22, 1, -25}, // 0x54 'T' - {2480, 19, 26, 25, 3, -25}, // 0x55 'U' - {2542, 21, 26, 23, 1, -25}, // 0x56 'V' - {2611, 32, 26, 33, 0, -25}, // 0x57 'W' - {2715, 21, 26, 23, 1, -25}, // 0x58 'X' - {2784, 23, 26, 24, 0, -25}, // 0x59 'Y' - {2859, 19, 26, 22, 1, -25}, // 0x5A 'Z' - {2921, 6, 33, 10, 2, -25}, // 0x5B '[' - {2946, 10, 26, 10, 0, -25}, // 0x5C '\' - {2979, 6, 33, 10, 1, -25}, // 0x5D ']' - {3004, 13, 13, 16, 2, -24}, // 0x5E '^' - {3026, 21, 2, 19, -1, 5}, // 0x5F '_' - {3032, 7, 5, 9, 1, -25}, // 0x60 '`' - {3037, 17, 19, 19, 1, -18}, // 0x61 'a' - {3078, 16, 26, 20, 2, -25}, // 0x62 'b' - {3130, 16, 19, 18, 1, -18}, // 0x63 'c' - {3168, 17, 26, 20, 1, -25}, // 0x64 'd' - {3224, 16, 19, 19, 1, -18}, // 0x65 'e' - {3262, 7, 26, 10, 1, -25}, // 0x66 'f' - {3285, 16, 27, 19, 1, -18}, // 0x67 'g' - {3339, 15, 26, 19, 2, -25}, // 0x68 'h' - {3388, 3, 26, 8, 2, -25}, // 0x69 'i' - {3398, 6, 34, 9, 0, -25}, // 0x6A 'j' - {3424, 16, 26, 18, 2, -25}, // 0x6B 'k' - {3476, 3, 26, 7, 2, -25}, // 0x6C 'l' - {3486, 24, 19, 28, 2, -18}, // 0x6D 'm' - {3543, 15, 19, 19, 2, -18}, // 0x6E 'n' - {3579, 17, 19, 19, 1, -18}, // 0x6F 'o' - {3620, 16, 25, 20, 2, -18}, // 0x70 'p' - {3670, 17, 25, 20, 1, -18}, // 0x71 'q' - {3724, 9, 19, 12, 2, -18}, // 0x72 'r' - {3746, 14, 19, 17, 2, -18}, // 0x73 's' - {3780, 7, 23, 10, 1, -22}, // 0x74 't' - {3801, 15, 19, 19, 2, -18}, // 0x75 'u' - {3837, 17, 19, 17, 0, -18}, // 0x76 'v' - {3878, 25, 19, 25, 0, -18}, // 0x77 'w' - {3938, 16, 19, 17, 0, -18}, // 0x78 'x' - {3976, 17, 27, 17, 0, -18}, // 0x79 'y' - {4034, 15, 19, 17, 1, -18}, // 0x7A 'z' - {4070, 8, 33, 12, 1, -25}, // 0x7B '{' - {4103, 2, 33, 9, 3, -25}, // 0x7C '|' - {4112, 8, 33, 12, 3, -25}, // 0x7D '}' - {4145, 15, 7, 18, 1, -15}}; // 0x7E '~' - -static const GFXfont FreeSans18pt7b = { - (const uint8_t *)FreeSans18pt7bBitmaps, - (const GFXglyph *)FreeSans18pt7bGlyphs, - 0x20, 0x7E, 42}; - -static const uint8_t FreeSans24pt7bBitmaps[] = { - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xEE, 0x66, - 0x66, 0x00, 0x0F, 0xFF, 0xFF, 0xF8, 0xFF, 0x8F, 0xF8, 0xFF, 0x8F, 0xF8, - 0xF7, 0x8F, 0x78, 0xF7, 0x0F, 0x70, 0x77, 0x06, 0x30, 0x60, 0x00, 0x70, - 0x3C, 0x00, 0x70, 0x3C, 0x00, 0xF0, 0x38, 0x00, 0xF0, 0x38, 0x00, 0xF0, - 0x78, 0x00, 0xE0, 0x78, 0x00, 0xE0, 0x78, 0x01, 0xE0, 0x70, 0x01, 0xE0, - 0x70, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, - 0xFF, 0x03, 0xC0, 0xE0, 0x03, 0xC0, 0xE0, 0x03, 0xC1, 0xE0, 0x03, 0x81, - 0xE0, 0x03, 0x81, 0xE0, 0x07, 0x81, 0xC0, 0x07, 0x81, 0xC0, 0x07, 0x81, - 0xC0, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFE, 0x0F, 0x03, - 0x80, 0x0F, 0x03, 0x80, 0x0F, 0x07, 0x80, 0x0E, 0x07, 0x80, 0x0E, 0x07, - 0x80, 0x1E, 0x07, 0x00, 0x1E, 0x07, 0x00, 0x1E, 0x0F, 0x00, 0x1C, 0x0F, - 0x00, 0x1C, 0x0F, 0x00, 0x00, 0x70, 0x00, 0x01, 0xC0, 0x00, 0x07, 0x80, - 0x01, 0xFF, 0xE0, 0x1F, 0xFF, 0xC0, 0xFF, 0xFF, 0x83, 0xE7, 0x1F, 0x1E, - 0x1C, 0x3C, 0x78, 0x70, 0x7B, 0xC1, 0xC1, 0xEF, 0x07, 0x07, 0xBC, 0x1C, - 0x0E, 0xF0, 0x70, 0x03, 0xC1, 0xC0, 0x07, 0x87, 0x00, 0x1F, 0x1C, 0x00, - 0x7F, 0x70, 0x00, 0xFF, 0xE0, 0x01, 0xFF, 0xF0, 0x01, 0xFF, 0xF0, 0x00, - 0xFF, 0xF0, 0x01, 0xFF, 0xE0, 0x07, 0x1F, 0x80, 0x1C, 0x1F, 0x00, 0x70, - 0x3C, 0x01, 0xC0, 0xFE, 0x07, 0x03, 0xF8, 0x1C, 0x0F, 0xF0, 0x70, 0x3F, - 0xC1, 0xC0, 0xFF, 0x07, 0x03, 0xFE, 0x1C, 0x1E, 0x7C, 0x70, 0xF9, 0xFD, - 0xCF, 0xC3, 0xFF, 0xFE, 0x03, 0xFF, 0xF0, 0x03, 0xFF, 0x00, 0x01, 0xC0, - 0x00, 0x07, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x70, 0x00, 0x01, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x1C, 0x00, 0x0F, 0xE0, 0x00, 0x38, 0x00, 0x7F, 0xE0, - 0x00, 0xE0, 0x01, 0xFF, 0xE0, 0x01, 0xC0, 0x03, 0xC3, 0xE0, 0x07, 0x00, - 0x0F, 0x01, 0xE0, 0x1E, 0x00, 0x1C, 0x03, 0xC0, 0x38, 0x00, 0x78, 0x03, - 0x80, 0xE0, 0x00, 0xF0, 0x07, 0x01, 0xC0, 0x01, 0xE0, 0x0E, 0x07, 0x00, - 0x01, 0xC0, 0x1C, 0x0E, 0x00, 0x03, 0x80, 0x78, 0x38, 0x00, 0x07, 0x81, - 0xF0, 0x70, 0x00, 0x07, 0xEF, 0xC1, 0xC0, 0x00, 0x07, 0xFF, 0x03, 0x80, - 0x00, 0x07, 0xFC, 0x0E, 0x00, 0x00, 0x03, 0xE0, 0x3C, 0x00, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x00, 0x01, 0xE0, 0x3F, 0x80, 0x00, 0x03, 0x81, - 0xFF, 0x80, 0x00, 0x0E, 0x07, 0xFF, 0x80, 0x00, 0x1C, 0x0F, 0x8F, 0x80, - 0x00, 0x70, 0x3C, 0x07, 0x80, 0x00, 0xE0, 0x70, 0x0F, 0x00, 0x03, 0x81, - 0xE0, 0x0E, 0x00, 0x07, 0x03, 0xC0, 0x1C, 0x00, 0x1C, 0x07, 0x80, 0x38, - 0x00, 0x38, 0x0F, 0x00, 0x70, 0x00, 0xE0, 0x0E, 0x01, 0xE0, 0x03, 0xC0, - 0x1E, 0x07, 0xC0, 0x07, 0x00, 0x1F, 0xBF, 0x00, 0x1C, 0x00, 0x1F, 0xFC, - 0x00, 0x38, 0x00, 0x1F, 0xF0, 0x00, 0xE0, 0x00, 0x0F, 0x80, 0x00, 0x7F, - 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x7C, 0x3E, 0x00, - 0x07, 0x81, 0xF0, 0x00, 0xF0, 0x0F, 0x00, 0x0F, 0x00, 0xF0, 0x00, 0xF0, - 0x0F, 0x00, 0x0F, 0x00, 0xF0, 0x00, 0x78, 0x1F, 0x00, 0x07, 0xC3, 0xE0, - 0x00, 0x3C, 0x7C, 0x00, 0x03, 0xEF, 0x80, 0x00, 0x1F, 0xF0, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0xFF, 0xE0, - 0x78, 0x1F, 0x1F, 0x07, 0x83, 0xE0, 0xF8, 0x78, 0x7C, 0x07, 0xC7, 0x87, - 0x80, 0x3E, 0xF0, 0x78, 0x03, 0xEF, 0x0F, 0x00, 0x1F, 0xF0, 0xF0, 0x00, - 0xFE, 0x0F, 0x00, 0x07, 0xC0, 0x78, 0x00, 0x3E, 0x07, 0x80, 0x07, 0xE0, - 0x7C, 0x01, 0xFF, 0x03, 0xE0, 0x3F, 0xF8, 0x3F, 0xFF, 0xE7, 0xC1, 0xFF, - 0xF8, 0x3E, 0x0F, 0xFF, 0x03, 0xF0, 0x3F, 0xC0, 0x00, 0xFF, 0xFF, 0xFF, - 0xFD, 0xCE, 0x73, 0x9C, 0x00, 0xC0, 0x38, 0x0E, 0x01, 0xC0, 0x70, 0x1E, - 0x03, 0x80, 0x70, 0x1C, 0x03, 0x80, 0xF0, 0x1E, 0x03, 0x80, 0x70, 0x1E, - 0x03, 0xC0, 0x78, 0x0E, 0x01, 0xC0, 0x38, 0x0F, 0x01, 0xE0, 0x3C, 0x07, - 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x3C, 0x07, 0x80, 0xF0, 0x0E, 0x01, 0xC0, - 0x3C, 0x03, 0x80, 0x70, 0x0F, 0x00, 0xE0, 0x1C, 0x01, 0xC0, 0x38, 0x03, - 0x80, 0x70, 0x07, 0x00, 0x60, 0xE0, 0x1C, 0x07, 0x00, 0xE0, 0x38, 0x07, - 0x01, 0xC0, 0x38, 0x0E, 0x03, 0xC0, 0x70, 0x1C, 0x07, 0x81, 0xE0, 0x38, - 0x0E, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, - 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0x81, 0xE0, 0x78, 0x1E, 0x07, 0x01, 0xC0, - 0xF0, 0x38, 0x1E, 0x07, 0x01, 0xC0, 0xE0, 0x38, 0x1C, 0x06, 0x03, 0x80, - 0x03, 0x00, 0x0C, 0x00, 0x30, 0x10, 0xC2, 0xF3, 0x3F, 0xFF, 0xF3, 0xFF, - 0x01, 0xE0, 0x0F, 0xC0, 0x7F, 0x81, 0xCE, 0x0E, 0x1C, 0x18, 0x60, 0x00, - 0x38, 0x00, 0x00, 0x70, 0x00, 0x00, 0xE0, 0x00, 0x01, 0xC0, 0x00, 0x03, - 0x80, 0x00, 0x07, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x38, - 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xE0, 0x07, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x70, 0x00, 0x00, 0xE0, 0x00, 0x01, 0xC0, 0x00, 0x03, 0x80, 0x00, - 0x07, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x8C, 0x63, 0x19, 0xBD, 0x80, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x18, 0x01, - 0xC0, 0x0C, 0x00, 0x60, 0x07, 0x00, 0x38, 0x01, 0x80, 0x1C, 0x00, 0xE0, - 0x06, 0x00, 0x70, 0x03, 0x80, 0x18, 0x01, 0xC0, 0x0E, 0x00, 0x60, 0x07, - 0x00, 0x38, 0x01, 0x80, 0x1C, 0x00, 0xE0, 0x06, 0x00, 0x30, 0x03, 0x80, - 0x1C, 0x00, 0xC0, 0x0E, 0x00, 0x70, 0x03, 0x00, 0x38, 0x01, 0xC0, 0x0C, - 0x00, 0xE0, 0x07, 0x00, 0x30, 0x00, 0x01, 0xFE, 0x00, 0x1F, 0xFE, 0x00, - 0xFF, 0xFC, 0x07, 0xF3, 0xF8, 0x1F, 0x03, 0xE0, 0xF8, 0x07, 0xC3, 0xC0, - 0x0F, 0x1F, 0x00, 0x3E, 0x78, 0x00, 0x79, 0xE0, 0x01, 0xE7, 0x80, 0x07, - 0xBE, 0x00, 0x1E, 0xF0, 0x00, 0x7F, 0xC0, 0x01, 0xFF, 0x00, 0x03, 0xFC, - 0x00, 0x0F, 0xF0, 0x00, 0x3F, 0xC0, 0x00, 0xFF, 0x00, 0x03, 0xFC, 0x00, - 0x1F, 0xF0, 0x00, 0x7F, 0xC0, 0x01, 0xFF, 0x80, 0x07, 0x9E, 0x00, 0x1E, - 0x78, 0x00, 0x79, 0xE0, 0x01, 0xE7, 0xC0, 0x0F, 0x8F, 0x00, 0x3C, 0x3E, - 0x01, 0xF0, 0x7C, 0x0F, 0x81, 0xFC, 0xFE, 0x03, 0xFF, 0xF0, 0x07, 0xFF, - 0x00, 0x07, 0xF0, 0x00, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0xF0, 0x3E, 0x1F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, - 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, - 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, - 0x01, 0xE0, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x3F, 0xFF, 0x01, 0xFF, 0xFE, - 0x0F, 0xE3, 0xFC, 0x3E, 0x01, 0xF9, 0xF0, 0x03, 0xE7, 0xC0, 0x07, 0xDE, - 0x00, 0x1F, 0x78, 0x00, 0x3F, 0xE0, 0x00, 0xFF, 0x80, 0x03, 0xC0, 0x00, - 0x1F, 0x00, 0x00, 0x7C, 0x00, 0x03, 0xE0, 0x00, 0x0F, 0x80, 0x00, 0xFC, - 0x00, 0x07, 0xE0, 0x00, 0x7F, 0x00, 0x07, 0xF8, 0x00, 0x7F, 0x80, 0x03, - 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x07, 0xC0, 0x00, 0x3E, 0x00, - 0x01, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x3E, 0x00, 0x00, 0xF0, 0x00, 0x03, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, - 0x00, 0x00, 0x03, 0xFE, 0x00, 0x3F, 0xFE, 0x01, 0xFF, 0xFC, 0x0F, 0xE3, - 0xF8, 0x7C, 0x01, 0xF1, 0xF0, 0x03, 0xC7, 0x80, 0x0F, 0xBE, 0x00, 0x3E, - 0xF8, 0x00, 0x7B, 0xC0, 0x01, 0xE0, 0x00, 0x0F, 0x80, 0x00, 0x3C, 0x00, - 0x01, 0xF0, 0x00, 0x0F, 0x80, 0x0F, 0xFC, 0x00, 0x3F, 0xE0, 0x00, 0xFF, - 0xC0, 0x03, 0xFF, 0x80, 0x00, 0x1F, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x78, - 0x00, 0x01, 0xF0, 0x00, 0x07, 0xFC, 0x00, 0x0F, 0xF0, 0x00, 0x3F, 0xC0, - 0x01, 0xFF, 0x00, 0x07, 0xBE, 0x00, 0x1E, 0x78, 0x00, 0xF9, 0xF8, 0x07, - 0xC3, 0xFF, 0xFE, 0x07, 0xFF, 0xF0, 0x0F, 0xFF, 0x80, 0x0F, 0xF8, 0x00, - 0x00, 0x01, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, - 0x00, 0xFE, 0x00, 0x03, 0xFC, 0x00, 0x0F, 0xF8, 0x00, 0x1F, 0xF0, 0x00, - 0x7B, 0xE0, 0x01, 0xE7, 0xC0, 0x03, 0xCF, 0x80, 0x0F, 0x1F, 0x00, 0x3C, - 0x3E, 0x00, 0xF8, 0x7C, 0x01, 0xE0, 0xF8, 0x07, 0x81, 0xF0, 0x1E, 0x03, - 0xE0, 0x3C, 0x07, 0xC0, 0xF0, 0x0F, 0x83, 0xC0, 0x1F, 0x0F, 0x80, 0x3E, - 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, - 0x00, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, 0x00, 0x3E, 0x00, - 0x00, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x03, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xF0, 0x7F, 0xFF, 0xC1, 0xFF, 0xFF, 0x07, - 0xFF, 0xFC, 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, - 0x00, 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0E, 0x3F, 0x80, - 0x7B, 0xFF, 0x81, 0xFF, 0xFF, 0x07, 0xFF, 0xFE, 0x1F, 0x80, 0xFC, 0x7C, - 0x00, 0xF9, 0xE0, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x1F, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x3F, - 0xC0, 0x01, 0xFF, 0x00, 0x07, 0xBE, 0x00, 0x1E, 0x7C, 0x00, 0xF9, 0xF8, - 0x0F, 0xC3, 0xFF, 0xFE, 0x07, 0xFF, 0xF0, 0x0F, 0xFF, 0x80, 0x07, 0xF0, - 0x00, 0x00, 0xFF, 0x00, 0x0F, 0xFF, 0x00, 0x7F, 0xFE, 0x03, 0xF1, 0xFC, - 0x1F, 0x01, 0xF0, 0xF8, 0x03, 0xE3, 0xC0, 0x07, 0x8F, 0x00, 0x1E, 0x78, - 0x00, 0x01, 0xE0, 0x00, 0x07, 0x80, 0x00, 0x3E, 0x00, 0x00, 0xF0, 0x3C, - 0x03, 0xC7, 0xFE, 0x0F, 0x3F, 0xFC, 0x3D, 0xFF, 0xF8, 0xFF, 0x03, 0xF3, - 0xF8, 0x03, 0xEF, 0xC0, 0x07, 0xBE, 0x00, 0x1F, 0xF8, 0x00, 0x3F, 0xE0, - 0x00, 0xFF, 0x80, 0x03, 0xFC, 0x00, 0x0F, 0x78, 0x00, 0x3D, 0xE0, 0x00, - 0xF7, 0x80, 0x07, 0xDF, 0x00, 0x1E, 0x3E, 0x00, 0xF8, 0xFC, 0x07, 0xC1, - 0xFF, 0xFE, 0x03, 0xFF, 0xF0, 0x07, 0xFF, 0x80, 0x07, 0xF8, 0x00, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, - 0x38, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x38, 0x00, 0x01, 0xE0, - 0x00, 0x0F, 0x00, 0x00, 0x38, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00, 0x00, - 0x3C, 0x00, 0x01, 0xE0, 0x00, 0x07, 0x80, 0x00, 0x3C, 0x00, 0x00, 0xF0, - 0x00, 0x07, 0x80, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, - 0x0F, 0x00, 0x00, 0x78, 0x00, 0x01, 0xE0, 0x00, 0x07, 0x80, 0x00, 0x3C, - 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x1F, 0x00, 0x00, 0x78, 0x00, - 0x01, 0xE0, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFE, 0x00, - 0x1F, 0xFE, 0x01, 0xFF, 0xFC, 0x0F, 0xF3, 0xF8, 0x3E, 0x01, 0xF1, 0xF0, - 0x03, 0xC7, 0xC0, 0x0F, 0x9E, 0x00, 0x1E, 0x78, 0x00, 0x79, 0xE0, 0x01, - 0xE7, 0x80, 0x0F, 0x9F, 0x00, 0x3C, 0x3E, 0x01, 0xF0, 0x7E, 0x1F, 0x80, - 0xFF, 0xFC, 0x01, 0xFF, 0xC0, 0x0F, 0xFF, 0xC0, 0xFF, 0x3F, 0x87, 0xE0, - 0x1F, 0x1F, 0x00, 0x3E, 0xF8, 0x00, 0x7B, 0xC0, 0x01, 0xFF, 0x00, 0x03, - 0xFC, 0x00, 0x0F, 0xF0, 0x00, 0x3F, 0xC0, 0x00, 0xFF, 0x00, 0x07, 0xFE, - 0x00, 0x1F, 0x7C, 0x00, 0xF9, 0xF8, 0x07, 0xC3, 0xFF, 0xFF, 0x07, 0xFF, - 0xF8, 0x07, 0xFF, 0x80, 0x07, 0xF8, 0x00, 0x03, 0xFE, 0x00, 0x3F, 0xFE, - 0x01, 0xFF, 0xFC, 0x0F, 0xE3, 0xF8, 0x3E, 0x03, 0xF1, 0xF0, 0x03, 0xC7, - 0x80, 0x0F, 0x3E, 0x00, 0x1E, 0xF0, 0x00, 0x7B, 0xC0, 0x01, 0xEF, 0x00, - 0x07, 0xFC, 0x00, 0x1F, 0xF0, 0x00, 0x7F, 0xC0, 0x01, 0xFF, 0x80, 0x0F, - 0xDE, 0x00, 0x3F, 0x7C, 0x01, 0xFC, 0xFE, 0x3F, 0xF1, 0xFF, 0xFB, 0xC3, - 0xFF, 0xCF, 0x07, 0xFC, 0x7C, 0x00, 0x01, 0xF0, 0x00, 0x07, 0x80, 0x00, - 0x1E, 0x00, 0x00, 0x7B, 0xE0, 0x03, 0xE7, 0x80, 0x0F, 0x1E, 0x00, 0x7C, - 0x7C, 0x01, 0xE0, 0xF8, 0x0F, 0x83, 0xFF, 0xFC, 0x07, 0xFF, 0xE0, 0x07, - 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, - 0xF8, 0xC6, 0x31, 0x9B, 0xD8, 0x00, 0x00, 0x06, 0x00, 0x00, 0x3C, 0x00, - 0x01, 0xF8, 0x00, 0x1F, 0xF0, 0x00, 0xFF, 0x80, 0x0F, 0xF8, 0x00, 0x7F, - 0xC0, 0x03, 0xFC, 0x00, 0x3F, 0xE0, 0x01, 0xFE, 0x00, 0x03, 0xF0, 0x00, - 0x07, 0xE0, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xFC, 0x00, 0x03, 0xFE, 0x00, - 0x00, 0xFF, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x3F, 0xE0, 0x00, 0x0F, 0xF8, - 0x00, 0x07, 0xF0, 0x00, 0x01, 0xE0, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xC0, 0x00, 0x01, 0xF0, - 0x00, 0x03, 0xF8, 0x00, 0x07, 0xFC, 0x00, 0x01, 0xFF, 0x00, 0x00, 0xFF, - 0x80, 0x00, 0x3F, 0xC0, 0x00, 0x1F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x03, - 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0xFF, - 0x00, 0x07, 0xF8, 0x00, 0x7F, 0xC0, 0x03, 0xFC, 0x00, 0x3F, 0xE0, 0x01, - 0xFF, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0x1C, 0x00, 0x00, 0x00, - 0x01, 0xF8, 0x00, 0xFF, 0xF0, 0x1F, 0xFF, 0x83, 0xFF, 0xFC, 0x7C, 0x07, - 0xE7, 0x80, 0x3E, 0xF8, 0x01, 0xFF, 0x00, 0x1F, 0xF0, 0x00, 0xFF, 0x00, - 0x0F, 0xF0, 0x00, 0xF0, 0x00, 0x1F, 0x00, 0x01, 0xE0, 0x00, 0x3E, 0x00, - 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x00, - 0x0F, 0x80, 0x00, 0xF0, 0x00, 0x1F, 0x00, 0x01, 0xF0, 0x00, 0x1F, 0x00, - 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x01, 0xF0, 0x00, 0x1F, - 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x3F, - 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0xFF, - 0xE0, 0x00, 0x07, 0xF8, 0x01, 0xFF, 0x00, 0x01, 0xF8, 0x00, 0x07, 0xF0, - 0x00, 0x7E, 0x00, 0x00, 0x3F, 0x00, 0x1F, 0x00, 0x00, 0x03, 0xF0, 0x07, - 0xC0, 0x00, 0x00, 0x3F, 0x01, 0xF0, 0x00, 0x00, 0x03, 0xE0, 0x7C, 0x00, - 0x08, 0x00, 0x3E, 0x0F, 0x00, 0x1F, 0xE3, 0xC3, 0xC3, 0xC0, 0x0F, 0xFE, - 0x78, 0x7C, 0x78, 0x03, 0xFF, 0xEF, 0x07, 0x9E, 0x00, 0xF8, 0x1F, 0xC0, - 0xF3, 0xC0, 0x3E, 0x01, 0xF8, 0x1F, 0x78, 0x0F, 0x80, 0x3F, 0x03, 0xFE, - 0x01, 0xE0, 0x03, 0xC0, 0x3F, 0xC0, 0x7C, 0x00, 0x78, 0x07, 0xF8, 0x0F, - 0x00, 0x1F, 0x00, 0xFF, 0x01, 0xE0, 0x03, 0xC0, 0x3D, 0xE0, 0x3C, 0x00, - 0x78, 0x07, 0xBC, 0x0F, 0x80, 0x0F, 0x00, 0xF7, 0x81, 0xF0, 0x03, 0xC0, - 0x3E, 0xF0, 0x3E, 0x00, 0x78, 0x07, 0x9E, 0x03, 0xC0, 0x1F, 0x01, 0xF3, - 0xC0, 0x78, 0x03, 0xC0, 0x3C, 0x78, 0x0F, 0x80, 0xF8, 0x0F, 0x07, 0x80, - 0xF8, 0x7F, 0x87, 0xC0, 0xF0, 0x1F, 0xFE, 0xFF, 0xF0, 0x1F, 0x01, 0xFF, - 0x9F, 0xFC, 0x01, 0xF0, 0x0F, 0xC1, 0xFE, 0x00, 0x1F, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x03, - 0xFE, 0x00, 0x7C, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0xFF, - 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x07, 0xC0, - 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x01, 0xFE, - 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0xF7, 0xC0, - 0x00, 0x03, 0xDF, 0x00, 0x00, 0x1F, 0x3C, 0x00, 0x00, 0x78, 0xF8, 0x00, - 0x01, 0xE1, 0xE0, 0x00, 0x0F, 0x87, 0x80, 0x00, 0x3C, 0x1F, 0x00, 0x01, - 0xF0, 0x3C, 0x00, 0x07, 0xC0, 0xF0, 0x00, 0x1E, 0x03, 0xE0, 0x00, 0xF8, - 0x07, 0x80, 0x03, 0xC0, 0x1F, 0x00, 0x0F, 0x00, 0x7C, 0x00, 0x7C, 0x00, - 0xF0, 0x01, 0xE0, 0x03, 0xE0, 0x07, 0xFF, 0xFF, 0x80, 0x3F, 0xFF, 0xFE, - 0x00, 0xFF, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xF0, 0x1F, 0x00, 0x03, 0xC0, - 0x78, 0x00, 0x0F, 0x83, 0xE0, 0x00, 0x3E, 0x0F, 0x80, 0x00, 0x78, 0x3C, - 0x00, 0x01, 0xF1, 0xF0, 0x00, 0x07, 0xC7, 0xC0, 0x00, 0x0F, 0x1E, 0x00, - 0x00, 0x3E, 0xF8, 0x00, 0x00, 0xFB, 0xE0, 0x00, 0x01, 0xF0, 0xFF, 0xFF, - 0xC0, 0x7F, 0xFF, 0xF8, 0x3F, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0x8F, 0x00, - 0x07, 0xE7, 0x80, 0x01, 0xF3, 0xC0, 0x00, 0x7D, 0xE0, 0x00, 0x3E, 0xF0, - 0x00, 0x1F, 0x78, 0x00, 0x0F, 0xBC, 0x00, 0x07, 0xDE, 0x00, 0x03, 0xCF, - 0x00, 0x03, 0xE7, 0x80, 0x03, 0xE3, 0xC0, 0x1F, 0xE1, 0xFF, 0xFF, 0xE0, - 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFE, 0x3C, 0x00, 0x3F, 0x9E, 0x00, 0x03, - 0xEF, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x7F, 0xC0, 0x00, 0x1F, 0xE0, 0x00, - 0x0F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x00, - 0x01, 0xFF, 0x00, 0x01, 0xF7, 0x80, 0x01, 0xFB, 0xFF, 0xFF, 0xF9, 0xFF, - 0xFF, 0xF8, 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, 0xF0, 0x00, 0x00, 0x0F, 0xE0, - 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xE0, - 0x07, 0xF0, 0x1F, 0xC0, 0x3F, 0x00, 0x1F, 0x81, 0xF8, 0x00, 0x3F, 0x07, - 0xC0, 0x00, 0x7C, 0x3E, 0x00, 0x00, 0xF0, 0xF0, 0x00, 0x03, 0xE7, 0xC0, - 0x00, 0x0F, 0x9F, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x01, 0xE0, 0x00, - 0x00, 0x07, 0x80, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, - 0x03, 0xE0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, - 0xF8, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x07, 0x80, 0x00, 0x07, 0xDE, - 0x00, 0x00, 0x1F, 0x7C, 0x00, 0x00, 0x79, 0xF0, 0x00, 0x01, 0xE3, 0xC0, - 0x00, 0x0F, 0x8F, 0x80, 0x00, 0x3E, 0x1F, 0x00, 0x01, 0xF0, 0x7E, 0x00, - 0x07, 0xC0, 0xFC, 0x00, 0x3E, 0x01, 0xFC, 0x03, 0xF8, 0x03, 0xFF, 0xFF, - 0xC0, 0x07, 0xFF, 0xFE, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x07, 0xFC, 0x00, - 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, - 0xFF, 0x0F, 0x80, 0x07, 0xF1, 0xF0, 0x00, 0x3E, 0x3E, 0x00, 0x03, 0xE7, - 0xC0, 0x00, 0x3E, 0xF8, 0x00, 0x07, 0xDF, 0x00, 0x00, 0x7B, 0xE0, 0x00, - 0x0F, 0xFC, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x1F, 0xF0, 0x00, 0x03, 0xFE, - 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x0F, 0xF8, 0x00, 0x01, 0xFF, 0x00, 0x00, - 0x3F, 0xE0, 0x00, 0x07, 0xFC, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x1F, 0xF0, - 0x00, 0x03, 0xFE, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x1F, 0xF8, 0x00, 0x03, - 0xDF, 0x00, 0x00, 0xFB, 0xE0, 0x00, 0x1E, 0x7C, 0x00, 0x07, 0xCF, 0x80, - 0x01, 0xF1, 0xF0, 0x00, 0xFE, 0x3F, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0xC0, - 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, - 0xFF, 0xBF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xEF, 0x80, 0x00, 0x07, 0xC0, - 0x00, 0x03, 0xE0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x7C, - 0x00, 0x00, 0x3E, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x07, - 0xC0, 0x00, 0x03, 0xE0, 0x00, 0x01, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFE, - 0x7F, 0xFF, 0xFF, 0x3E, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0x80, 0x00, - 0x07, 0xC0, 0x00, 0x03, 0xE0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0xF8, 0x00, - 0x00, 0x7C, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0x80, - 0x00, 0x07, 0xC0, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x1F, 0x00, 0x00, 0x3E, - 0x00, 0x00, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x03, 0xE0, - 0x00, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, 0x00, 0x3E, 0x00, - 0x00, 0x7F, 0xFF, 0xFC, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xF3, 0xE0, 0x00, - 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, 0x00, 0x3E, 0x00, 0x00, - 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x03, 0xE0, 0x00, 0x07, - 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x7C, - 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, - 0x00, 0x7F, 0xFC, 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFF, 0x00, - 0x7F, 0x80, 0xFF, 0x01, 0xFC, 0x00, 0x7F, 0x07, 0xE0, 0x00, 0x3E, 0x0F, - 0x80, 0x00, 0x3E, 0x3E, 0x00, 0x00, 0x7C, 0x7C, 0x00, 0x00, 0x79, 0xF0, - 0x00, 0x00, 0xFB, 0xE0, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x1F, 0x00, - 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xF0, 0x00, - 0x00, 0x01, 0xE0, 0x00, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0x80, 0x03, - 0xFF, 0xFF, 0x80, 0x07, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, - 0x07, 0xBC, 0x00, 0x00, 0x0F, 0x7C, 0x00, 0x00, 0x1E, 0xF8, 0x00, 0x00, - 0x3C, 0xF0, 0x00, 0x00, 0xF9, 0xF0, 0x00, 0x01, 0xF1, 0xF0, 0x00, 0x07, - 0xE3, 0xF0, 0x00, 0x1F, 0xC3, 0xF0, 0x00, 0x7F, 0x83, 0xF8, 0x03, 0xF7, - 0x03, 0xFF, 0xFF, 0xCE, 0x03, 0xFF, 0xFE, 0x1C, 0x01, 0xFF, 0xF8, 0x38, - 0x00, 0xFF, 0x80, 0x00, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, 0x00, - 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, - 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, - 0xFF, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x03, 0xFC, 0x00, - 0x00, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x03, - 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, - 0x03, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xF0, - 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x0F, - 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x1E, - 0x00, 0x03, 0xC0, 0x00, 0x78, 0x00, 0x0F, 0x00, 0x01, 0xE0, 0x00, 0x3C, - 0x00, 0x07, 0x80, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x78, - 0x00, 0x0F, 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, 0xF0, - 0x00, 0x1E, 0x00, 0x03, 0xC0, 0x00, 0x7F, 0x80, 0x0F, 0xF0, 0x01, 0xFE, - 0x00, 0x3F, 0xC0, 0x0F, 0xF8, 0x01, 0xFF, 0x80, 0x3F, 0xF0, 0x0F, 0x9F, - 0x01, 0xF3, 0xFF, 0xFC, 0x3F, 0xFF, 0x03, 0xFF, 0xC0, 0x0F, 0xE0, 0x00, - 0xF0, 0x00, 0x0F, 0xDE, 0x00, 0x03, 0xF3, 0xC0, 0x00, 0xFC, 0x78, 0x00, - 0x3F, 0x0F, 0x00, 0x0F, 0xC1, 0xE0, 0x03, 0xF0, 0x3C, 0x00, 0xFC, 0x07, - 0x80, 0x3F, 0x00, 0xF0, 0x0F, 0xC0, 0x1E, 0x01, 0xF0, 0x03, 0xC0, 0x7C, - 0x00, 0x78, 0x1F, 0x00, 0x0F, 0x07, 0xC0, 0x01, 0xE1, 0xF0, 0x00, 0x3C, - 0x7E, 0x00, 0x07, 0x9F, 0xE0, 0x00, 0xF7, 0xFE, 0x00, 0x1F, 0xF7, 0xC0, - 0x03, 0xFC, 0x7C, 0x00, 0x7F, 0x07, 0xC0, 0x0F, 0xC0, 0xFC, 0x01, 0xF0, - 0x0F, 0x80, 0x3C, 0x00, 0xF8, 0x07, 0x80, 0x0F, 0x80, 0xF0, 0x01, 0xF0, - 0x1E, 0x00, 0x1F, 0x03, 0xC0, 0x01, 0xF0, 0x78, 0x00, 0x3E, 0x0F, 0x00, - 0x03, 0xE1, 0xE0, 0x00, 0x3E, 0x3C, 0x00, 0x07, 0xC7, 0x80, 0x00, 0x7C, - 0xF0, 0x00, 0x07, 0xDE, 0x00, 0x00, 0xFC, 0xF0, 0x00, 0x07, 0x80, 0x00, - 0x3C, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x00, 0x03, 0xC0, - 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x3C, 0x00, 0x01, - 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, - 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x3C, 0x00, 0x01, 0xE0, 0x00, 0x0F, - 0x00, 0x00, 0x78, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, - 0x07, 0x80, 0x00, 0x3C, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x78, - 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC0, 0xFC, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, - 0x7F, 0xFE, 0x00, 0x00, 0xFF, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, - 0xFF, 0xFF, 0x00, 0x01, 0xEF, 0xFF, 0x00, 0x01, 0xEF, 0xF7, 0x80, 0x01, - 0xEF, 0xF7, 0x80, 0x03, 0xCF, 0xF7, 0x80, 0x03, 0xCF, 0xF3, 0xC0, 0x03, - 0xCF, 0xF3, 0xC0, 0x07, 0x8F, 0xF3, 0xC0, 0x07, 0x8F, 0xF1, 0xE0, 0x07, - 0x8F, 0xF1, 0xE0, 0x0F, 0x0F, 0xF1, 0xE0, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, - 0x0F, 0xF0, 0xF0, 0x1E, 0x0F, 0xF0, 0xF0, 0x1E, 0x0F, 0xF0, 0x78, 0x1E, - 0x0F, 0xF0, 0x78, 0x3C, 0x0F, 0xF0, 0x78, 0x3C, 0x0F, 0xF0, 0x3C, 0x3C, - 0x0F, 0xF0, 0x3C, 0x78, 0x0F, 0xF0, 0x1C, 0x78, 0x0F, 0xF0, 0x1E, 0x78, - 0x0F, 0xF0, 0x1E, 0xF0, 0x0F, 0xF0, 0x0E, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, - 0x0F, 0xF0, 0x0F, 0xE0, 0x0F, 0xF0, 0x07, 0xE0, 0x0F, 0xF0, 0x07, 0xE0, - 0x0F, 0xF0, 0x07, 0xC0, 0x0F, 0xF8, 0x00, 0x03, 0xFE, 0x00, 0x00, 0xFF, - 0xC0, 0x00, 0x3F, 0xF8, 0x00, 0x0F, 0xFE, 0x00, 0x03, 0xFF, 0xC0, 0x00, - 0xFF, 0xF8, 0x00, 0x3F, 0xDE, 0x00, 0x0F, 0xF7, 0xC0, 0x03, 0xFC, 0xF8, - 0x00, 0xFF, 0x3E, 0x00, 0x3F, 0xC7, 0xC0, 0x0F, 0xF0, 0xF0, 0x03, 0xFC, - 0x3E, 0x00, 0xFF, 0x07, 0xC0, 0x3F, 0xC0, 0xF0, 0x0F, 0xF0, 0x3E, 0x03, - 0xFC, 0x07, 0xC0, 0xFF, 0x00, 0xF0, 0x3F, 0xC0, 0x3E, 0x0F, 0xF0, 0x07, - 0xC3, 0xFC, 0x01, 0xF0, 0xFF, 0x00, 0x3E, 0x3F, 0xC0, 0x07, 0x8F, 0xF0, - 0x01, 0xF3, 0xFC, 0x00, 0x3E, 0xFF, 0x00, 0x07, 0xBF, 0xC0, 0x01, 0xFF, - 0xF0, 0x00, 0x3F, 0xFC, 0x00, 0x07, 0xFF, 0x00, 0x01, 0xFF, 0xC0, 0x00, - 0x3F, 0xF0, 0x00, 0x0F, 0xFC, 0x00, 0x01, 0xF0, 0x00, 0x07, 0xF0, 0x00, - 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFC, - 0x00, 0x7F, 0x80, 0xFF, 0x00, 0x7E, 0x00, 0x1F, 0xC0, 0x7E, 0x00, 0x03, - 0xE0, 0x3E, 0x00, 0x00, 0xF8, 0x3E, 0x00, 0x00, 0x3E, 0x3E, 0x00, 0x00, - 0x1F, 0x1F, 0x00, 0x00, 0x07, 0xCF, 0x00, 0x00, 0x03, 0xEF, 0x80, 0x00, - 0x00, 0xF7, 0xC0, 0x00, 0x00, 0x7B, 0xC0, 0x00, 0x00, 0x3F, 0xE0, 0x00, - 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x07, 0xFC, 0x00, - 0x00, 0x03, 0xFE, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x80, - 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x3D, 0xF0, 0x00, 0x00, 0x1E, 0x78, - 0x00, 0x00, 0x1F, 0x3E, 0x00, 0x00, 0x0F, 0x9F, 0x00, 0x00, 0x0F, 0x87, - 0xC0, 0x00, 0x07, 0xC3, 0xF0, 0x00, 0x07, 0xC0, 0xFC, 0x00, 0x07, 0xE0, - 0x3F, 0x00, 0x07, 0xE0, 0x0F, 0xE0, 0x0F, 0xE0, 0x03, 0xFF, 0xFF, 0xE0, - 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0x1F, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0x00, - 0x00, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0x1F, 0xFF, - 0xFF, 0xCF, 0x80, 0x03, 0xF7, 0xC0, 0x00, 0xFB, 0xE0, 0x00, 0x3F, 0xF0, - 0x00, 0x1F, 0xF8, 0x00, 0x0F, 0xFC, 0x00, 0x07, 0xFE, 0x00, 0x03, 0xFF, - 0x00, 0x01, 0xFF, 0x80, 0x00, 0xFF, 0xC0, 0x00, 0xFB, 0xE0, 0x00, 0xFD, - 0xF0, 0x03, 0xFC, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFE, 0x3F, 0xFF, 0xFC, - 0x1F, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x07, 0xC0, 0x00, 0x03, 0xE0, 0x00, - 0x01, 0xF0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x3E, 0x00, - 0x00, 0x1F, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x07, 0xC0, 0x00, 0x03, 0xE0, - 0x00, 0x01, 0xF0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, - 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0xE0, - 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x7F, 0x80, 0xFF, 0x00, 0x7E, 0x00, 0x1F, - 0xC0, 0x7E, 0x00, 0x03, 0xE0, 0x3E, 0x00, 0x00, 0xF8, 0x3E, 0x00, 0x00, - 0x3E, 0x3E, 0x00, 0x00, 0x1F, 0x1F, 0x00, 0x00, 0x07, 0xCF, 0x00, 0x00, - 0x03, 0xEF, 0x80, 0x00, 0x00, 0xF7, 0xC0, 0x00, 0x00, 0x7B, 0xC0, 0x00, - 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x0F, 0xF8, 0x00, - 0x00, 0x07, 0xFC, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x01, 0xFF, 0x00, - 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x3D, 0xF0, - 0x00, 0x00, 0x1E, 0x78, 0x00, 0x00, 0x1F, 0x3E, 0x00, 0x04, 0x0F, 0x9F, - 0x00, 0x03, 0x0F, 0x87, 0xC0, 0x03, 0xC7, 0xC3, 0xF0, 0x01, 0xF7, 0xC0, - 0xFC, 0x00, 0x7F, 0xE0, 0x3F, 0x00, 0x1F, 0xE0, 0x0F, 0xE0, 0x1F, 0xE0, - 0x03, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xCF, - 0xC0, 0x01, 0xFF, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, - 0x00, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x0F, - 0xFF, 0xFF, 0xF8, 0xF8, 0x00, 0x0F, 0xCF, 0x80, 0x00, 0x7C, 0xF8, 0x00, - 0x07, 0xCF, 0x80, 0x00, 0x3E, 0xF8, 0x00, 0x03, 0xEF, 0x80, 0x00, 0x3E, - 0xF8, 0x00, 0x03, 0xCF, 0x80, 0x00, 0x3C, 0xF8, 0x00, 0x07, 0xCF, 0x80, - 0x00, 0x78, 0xF8, 0x00, 0x0F, 0x8F, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFC, - 0x0F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0x0F, 0x80, 0x03, 0xF0, 0xF8, - 0x00, 0x0F, 0x8F, 0x80, 0x00, 0x78, 0xF8, 0x00, 0x07, 0xCF, 0x80, 0x00, - 0x7C, 0xF8, 0x00, 0x03, 0xCF, 0x80, 0x00, 0x3C, 0xF8, 0x00, 0x03, 0xCF, - 0x80, 0x00, 0x3C, 0xF8, 0x00, 0x03, 0xCF, 0x80, 0x00, 0x3C, 0xF8, 0x00, - 0x03, 0xCF, 0x80, 0x00, 0x3E, 0xF8, 0x00, 0x03, 0xEF, 0x80, 0x00, 0x3F, - 0x00, 0x3F, 0x80, 0x00, 0x3F, 0xFE, 0x00, 0x1F, 0xFF, 0xF0, 0x07, 0xFF, - 0xFF, 0x01, 0xF8, 0x07, 0xF0, 0x7E, 0x00, 0x3F, 0x0F, 0x80, 0x03, 0xE1, - 0xE0, 0x00, 0x3E, 0x7C, 0x00, 0x03, 0xCF, 0x80, 0x00, 0x79, 0xF0, 0x00, - 0x0F, 0x3E, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x0F, - 0xF8, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, - 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x07, 0xFC, 0x00, - 0x00, 0x3F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x01, - 0xFE, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x07, 0xBC, 0x00, 0x00, 0xF7, 0xC0, - 0x00, 0x3E, 0xF8, 0x00, 0x07, 0x8F, 0x80, 0x01, 0xF1, 0xFC, 0x00, 0xFC, - 0x1F, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xF0, 0x00, 0x3F, - 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xF0, 0x01, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x07, - 0xC0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, 0xE0, 0x00, - 0x00, 0x7C, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x3E, - 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x1F, 0x00, 0x00, - 0x03, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x01, 0xF0, - 0x00, 0x00, 0x3E, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0xF8, 0x00, 0x00, - 0x1F, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x0F, 0x80, - 0x00, 0x01, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, - 0xF8, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x03, 0xE0, 0x00, 0xF0, 0x00, 0x03, - 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, - 0x03, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xF0, - 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x0F, - 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x3F, 0xC0, 0x00, - 0x0F, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x3F, 0xC0, - 0x00, 0x0F, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x3F, - 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0xFF, 0x80, 0x00, - 0x7D, 0xE0, 0x00, 0x1F, 0x7C, 0x00, 0x0F, 0x9F, 0x80, 0x07, 0xE3, 0xF8, - 0x03, 0xF0, 0x7F, 0xFF, 0xF8, 0x0F, 0xFF, 0xFC, 0x00, 0xFF, 0xFE, 0x00, - 0x0F, 0xFC, 0x00, 0x78, 0x00, 0x00, 0xFB, 0xE0, 0x00, 0x07, 0xDF, 0x00, - 0x00, 0x3C, 0x78, 0x00, 0x03, 0xE3, 0xE0, 0x00, 0x1F, 0x1F, 0x00, 0x00, - 0xF0, 0x78, 0x00, 0x0F, 0x83, 0xE0, 0x00, 0x7C, 0x0F, 0x00, 0x03, 0xC0, - 0x78, 0x00, 0x3E, 0x03, 0xE0, 0x01, 0xF0, 0x0F, 0x00, 0x0F, 0x00, 0x7C, - 0x00, 0xF8, 0x03, 0xE0, 0x07, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0x7C, 0x03, - 0xE0, 0x03, 0xE0, 0x1F, 0x00, 0x0F, 0x00, 0xF0, 0x00, 0x7C, 0x07, 0x80, - 0x01, 0xE0, 0x78, 0x00, 0x0F, 0x03, 0xC0, 0x00, 0x7C, 0x1E, 0x00, 0x01, - 0xE1, 0xE0, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x7C, 0x78, 0x00, 0x01, 0xE7, - 0x80, 0x00, 0x0F, 0x3C, 0x00, 0x00, 0x7D, 0xE0, 0x00, 0x01, 0xFE, 0x00, - 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, - 0x0F, 0xC0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x03, - 0xDF, 0x00, 0x07, 0xE0, 0x00, 0xF9, 0xF0, 0x00, 0xFC, 0x00, 0x1F, 0x3E, - 0x00, 0x1F, 0xC0, 0x03, 0xE7, 0xC0, 0x03, 0xF8, 0x00, 0x78, 0x78, 0x00, - 0xFF, 0x00, 0x1F, 0x0F, 0x00, 0x1F, 0xF0, 0x03, 0xE1, 0xF0, 0x03, 0xDE, - 0x00, 0x7C, 0x3E, 0x00, 0x7B, 0xC0, 0x0F, 0x03, 0xC0, 0x1E, 0x78, 0x01, - 0xE0, 0x78, 0x03, 0xC7, 0x80, 0x7C, 0x0F, 0x80, 0x78, 0xF0, 0x0F, 0x81, - 0xF0, 0x1E, 0x1E, 0x01, 0xE0, 0x1E, 0x03, 0xC3, 0xE0, 0x3C, 0x03, 0xC0, - 0x78, 0x3C, 0x0F, 0x80, 0x7C, 0x0F, 0x07, 0x81, 0xF0, 0x0F, 0x83, 0xC0, - 0xF0, 0x3C, 0x00, 0xF0, 0x78, 0x0F, 0x07, 0x80, 0x1E, 0x0F, 0x01, 0xE0, - 0xF0, 0x03, 0xC1, 0xE0, 0x3C, 0x3E, 0x00, 0x7C, 0x78, 0x07, 0xC7, 0x80, - 0x07, 0x8F, 0x00, 0x78, 0xF0, 0x00, 0xF1, 0xE0, 0x0F, 0x1E, 0x00, 0x1E, - 0x78, 0x01, 0xE7, 0xC0, 0x03, 0xEF, 0x00, 0x1E, 0xF0, 0x00, 0x3D, 0xE0, - 0x03, 0xDE, 0x00, 0x07, 0xBC, 0x00, 0x7B, 0xC0, 0x00, 0xFF, 0x00, 0x0F, - 0xF8, 0x00, 0x1F, 0xE0, 0x00, 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x1F, 0xC0, - 0x00, 0x3F, 0x80, 0x03, 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x7F, 0x00, 0x00, - 0xFC, 0x00, 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x7E, 0x00, - 0x01, 0xF0, 0xF8, 0x00, 0x07, 0xC1, 0xF0, 0x00, 0x3E, 0x07, 0xE0, 0x01, - 0xF0, 0x0F, 0x80, 0x07, 0xC0, 0x1F, 0x00, 0x3E, 0x00, 0x7E, 0x01, 0xF0, - 0x00, 0xF8, 0x07, 0xC0, 0x01, 0xF0, 0x3E, 0x00, 0x07, 0xC1, 0xF0, 0x00, - 0x0F, 0x87, 0x80, 0x00, 0x1F, 0x3E, 0x00, 0x00, 0x7D, 0xF0, 0x00, 0x00, - 0xFF, 0x80, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x0F, - 0x80, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x0F, 0xF8, - 0x00, 0x00, 0x7D, 0xF0, 0x00, 0x01, 0xF3, 0xE0, 0x00, 0x0F, 0x87, 0xC0, - 0x00, 0x7C, 0x1F, 0x00, 0x01, 0xF0, 0x3E, 0x00, 0x0F, 0x80, 0x7C, 0x00, - 0x7C, 0x01, 0xF0, 0x03, 0xF0, 0x03, 0xE0, 0x0F, 0x80, 0x0F, 0xC0, 0x7C, - 0x00, 0x1F, 0x03, 0xF0, 0x00, 0x3E, 0x0F, 0x80, 0x00, 0xFC, 0x7C, 0x00, - 0x01, 0xF3, 0xF0, 0x00, 0x03, 0xE0, 0xF8, 0x00, 0x00, 0xFD, 0xF0, 0x00, - 0x03, 0xE7, 0xE0, 0x00, 0x1F, 0x0F, 0x80, 0x00, 0x7C, 0x1F, 0x00, 0x03, - 0xE0, 0x7C, 0x00, 0x1F, 0x80, 0xF8, 0x00, 0x7C, 0x01, 0xF0, 0x03, 0xE0, - 0x07, 0xC0, 0x0F, 0x80, 0x0F, 0x80, 0x7C, 0x00, 0x3F, 0x01, 0xE0, 0x00, - 0x7C, 0x0F, 0x80, 0x00, 0xF8, 0x7C, 0x00, 0x03, 0xE1, 0xF0, 0x00, 0x07, - 0xCF, 0x80, 0x00, 0x0F, 0xBC, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x7F, - 0x80, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0x80, - 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x01, 0xE0, 0x00, - 0x00, 0x07, 0x80, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, - 0x01, 0xE0, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, - 0x78, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x1E, - 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFC, - 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x07, 0xE0, 0x00, 0x01, - 0xF0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x3F, 0x00, 0x00, - 0x0F, 0x80, 0x00, 0x07, 0xC0, 0x00, 0x03, 0xF0, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0xFC, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0xC0, - 0x00, 0x07, 0xE0, 0x00, 0x01, 0xF0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x3F, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x07, 0xC0, 0x00, 0x03, - 0xE0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x3E, 0x00, 0x00, - 0x1F, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0x07, 0x83, - 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xF0, - 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, - 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83, - 0xC1, 0xE0, 0xF0, 0x7F, 0xFF, 0xFF, 0xF0, 0xC0, 0x07, 0x00, 0x38, 0x00, - 0xC0, 0x07, 0x00, 0x38, 0x00, 0xC0, 0x07, 0x00, 0x38, 0x00, 0xC0, 0x07, - 0x00, 0x38, 0x00, 0xC0, 0x07, 0x00, 0x38, 0x00, 0xC0, 0x07, 0x00, 0x38, - 0x00, 0xC0, 0x06, 0x00, 0x38, 0x00, 0xC0, 0x06, 0x00, 0x38, 0x01, 0xC0, - 0x06, 0x00, 0x38, 0x01, 0xC0, 0x06, 0x00, 0x38, 0x01, 0xC0, 0x06, 0x00, - 0x38, 0x01, 0xC0, 0x06, 0xFF, 0xFF, 0xFF, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, - 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83, - 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xF0, - 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x78, 0x3C, 0x1E, - 0x0F, 0x07, 0xFF, 0xFF, 0xFF, 0xF0, 0x01, 0xE0, 0x00, 0x78, 0x00, 0x3F, - 0x00, 0x0F, 0xC0, 0x07, 0xF8, 0x01, 0xCE, 0x00, 0xF3, 0x80, 0x38, 0x70, - 0x0E, 0x1C, 0x07, 0x87, 0x81, 0xC0, 0xE0, 0xF0, 0x3C, 0x38, 0x07, 0x0E, - 0x01, 0xC7, 0x80, 0x79, 0xC0, 0x0E, 0xF0, 0x03, 0xF8, 0x00, 0x70, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x1F, 0x03, 0xE0, 0x78, 0x0F, - 0x01, 0xE0, 0x38, 0x03, 0xFF, 0x00, 0x1F, 0xFF, 0x80, 0x7F, 0xFF, 0x81, - 0xFC, 0x3F, 0x83, 0xC0, 0x1F, 0x0F, 0x80, 0x1E, 0x1E, 0x00, 0x3C, 0x3C, - 0x00, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x01, 0xE0, 0x00, 0x1F, 0xC0, 0x0F, - 0xFF, 0x80, 0xFF, 0xFF, 0x07, 0xFF, 0x9E, 0x1F, 0xC0, 0x3C, 0x3E, 0x00, - 0x78, 0xF8, 0x00, 0xF1, 0xE0, 0x01, 0xE3, 0xC0, 0x03, 0xC7, 0x80, 0x07, - 0x8F, 0x00, 0x1F, 0x1F, 0x00, 0xFE, 0x1F, 0xCF, 0xFE, 0x1F, 0xFF, 0x3F, - 0x1F, 0xFC, 0x7E, 0x1F, 0xC0, 0x7C, 0xE0, 0x00, 0x03, 0x80, 0x00, 0x0E, - 0x00, 0x00, 0x38, 0x00, 0x00, 0xE0, 0x00, 0x03, 0x80, 0x00, 0x0E, 0x00, - 0x00, 0x38, 0x00, 0x00, 0xE0, 0x00, 0x03, 0x87, 0xF8, 0x0E, 0x7F, 0xF8, - 0x3B, 0xFF, 0xF0, 0xEF, 0x8F, 0xE3, 0xF8, 0x0F, 0xCF, 0xC0, 0x1F, 0x3E, - 0x00, 0x3E, 0xF0, 0x00, 0xFB, 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, 0x00, - 0x1E, 0xE0, 0x00, 0x7F, 0x80, 0x01, 0xFE, 0x00, 0x07, 0xF8, 0x00, 0x1F, - 0xF0, 0x00, 0x7B, 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBE, 0x00, 0x3E, 0xF8, - 0x00, 0xF3, 0xF0, 0x07, 0xCF, 0xE0, 0x3E, 0x3B, 0xFF, 0xF8, 0xEF, 0xFF, - 0xC3, 0x8F, 0xFC, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFF, 0x00, 0x3F, 0xFE, - 0x03, 0xFF, 0xF8, 0x3F, 0x8F, 0xE1, 0xF0, 0x1F, 0x1F, 0x00, 0x7C, 0xF0, - 0x01, 0xEF, 0x80, 0x0F, 0x78, 0x00, 0x7B, 0xC0, 0x00, 0x1E, 0x00, 0x01, - 0xF0, 0x00, 0x0F, 0x80, 0x00, 0x7C, 0x00, 0x03, 0xE0, 0x00, 0x0F, 0x00, - 0x00, 0x78, 0x00, 0x03, 0xC0, 0x03, 0xDF, 0x00, 0x1E, 0x78, 0x00, 0xF3, - 0xE0, 0x0F, 0x8F, 0x80, 0xF8, 0x7F, 0xFF, 0x81, 0xFF, 0xF8, 0x03, 0xFF, - 0x80, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x03, - 0xC0, 0x00, 0x0F, 0x00, 0x00, 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, - 0x00, 0x0F, 0x00, 0x00, 0x3C, 0x07, 0xF8, 0xF0, 0x7F, 0xFB, 0xC3, 0xFF, - 0xFF, 0x1F, 0xC7, 0xFC, 0xFC, 0x07, 0xF3, 0xE0, 0x0F, 0xDF, 0x00, 0x1F, - 0x78, 0x00, 0x7D, 0xE0, 0x00, 0xFF, 0x80, 0x03, 0xFC, 0x00, 0x0F, 0xF0, - 0x00, 0x3F, 0xC0, 0x00, 0xFF, 0x00, 0x03, 0xFC, 0x00, 0x0F, 0xF0, 0x00, - 0x3D, 0xE0, 0x00, 0xF7, 0x80, 0x03, 0xDE, 0x00, 0x1F, 0x7C, 0x00, 0x7C, - 0xF8, 0x03, 0xF3, 0xF0, 0x1F, 0xC7, 0xFF, 0xF7, 0x0F, 0xFF, 0x9C, 0x1F, - 0xFC, 0x70, 0x1F, 0xC0, 0x00, 0x01, 0xFF, 0x00, 0x1F, 0xFE, 0x00, 0xFF, - 0xFE, 0x07, 0xE1, 0xFC, 0x3E, 0x01, 0xF1, 0xF0, 0x03, 0xE7, 0x80, 0x07, - 0x9E, 0x00, 0x1F, 0xF0, 0x00, 0x3F, 0xC0, 0x00, 0xFF, 0x00, 0x03, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x3C, 0x00, - 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x07, 0x80, 0x07, 0x9E, 0x00, 0x1E, - 0x7C, 0x00, 0xF8, 0xF8, 0x07, 0xC1, 0xFF, 0xFE, 0x03, 0xFF, 0xF0, 0x07, - 0xFF, 0x80, 0x07, 0xF8, 0x00, 0x07, 0xE1, 0xFC, 0x3F, 0x8F, 0x81, 0xE0, - 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x3C, - 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, - 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, - 0xF0, 0x1E, 0x03, 0xC0, 0x01, 0xFC, 0x3C, 0x1F, 0xFC, 0xF0, 0xFF, 0xFB, - 0xC7, 0xF1, 0xFF, 0x3F, 0x01, 0xFC, 0xF8, 0x03, 0xF7, 0xC0, 0x07, 0xDE, - 0x00, 0x1F, 0x78, 0x00, 0x7D, 0xE0, 0x00, 0xFF, 0x80, 0x03, 0xFC, 0x00, - 0x0F, 0xF0, 0x00, 0x3F, 0xC0, 0x00, 0xFF, 0x80, 0x03, 0xFE, 0x00, 0x0F, - 0x78, 0x00, 0x3D, 0xE0, 0x01, 0xF7, 0x80, 0x07, 0xDF, 0x00, 0x3F, 0x3E, - 0x00, 0xFC, 0xFC, 0x07, 0xF1, 0xFF, 0xFB, 0xC3, 0xFF, 0xCF, 0x07, 0xFE, - 0x3C, 0x07, 0xF0, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x78, 0x00, 0x79, - 0xF0, 0x01, 0xE3, 0xC0, 0x0F, 0x0F, 0xC0, 0xFC, 0x1F, 0xFF, 0xE0, 0x3F, - 0xFF, 0x00, 0x3F, 0xF0, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, - 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, - 0x00, 0xF0, 0x00, 0x0F, 0x0F, 0xF0, 0xF3, 0xFF, 0xCF, 0x7F, 0xFE, 0xFF, - 0x87, 0xEF, 0xE0, 0x1F, 0xFC, 0x01, 0xFF, 0x80, 0x0F, 0xF8, 0x00, 0xFF, - 0x80, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, - 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, - 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, - 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x00, 0x0F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, - 0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F, - 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, - 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, - 0x0F, 0x0F, 0x0F, 0x1F, 0xFF, 0xFE, 0xFC, 0xF0, 0x00, 0x07, 0x80, 0x00, - 0x3C, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x00, 0x03, 0xC0, - 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x80, 0x1F, 0x3C, 0x01, 0xF1, - 0xE0, 0x1F, 0x0F, 0x01, 0xF0, 0x78, 0x1F, 0x03, 0xC1, 0xF0, 0x1E, 0x1F, - 0x00, 0xF1, 0xF0, 0x07, 0x9F, 0x00, 0x3D, 0xF8, 0x01, 0xFF, 0xE0, 0x0F, - 0xFF, 0x00, 0x7F, 0x7C, 0x03, 0xF1, 0xE0, 0x1F, 0x0F, 0x80, 0xF0, 0x3E, - 0x07, 0x81, 0xF0, 0x3C, 0x07, 0xC1, 0xE0, 0x1F, 0x0F, 0x00, 0xF8, 0x78, - 0x03, 0xE3, 0xC0, 0x0F, 0x1E, 0x00, 0x7C, 0xF0, 0x01, 0xF7, 0x80, 0x0F, - 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFE, 0x03, 0xFC, 0x79, 0xFF, - 0xC7, 0xFF, 0x3D, 0xFF, 0xE7, 0xFF, 0xDF, 0xE1, 0xFF, 0x87, 0xEF, 0xC0, - 0x7F, 0x80, 0xFF, 0xE0, 0x1F, 0x80, 0x7F, 0xE0, 0x0F, 0x80, 0x1F, 0xF0, - 0x03, 0xC0, 0x0F, 0xF0, 0x01, 0xE0, 0x07, 0xF8, 0x00, 0xF0, 0x03, 0xFC, - 0x00, 0x78, 0x01, 0xFE, 0x00, 0x3C, 0x00, 0xFF, 0x00, 0x1E, 0x00, 0x7F, - 0x80, 0x0F, 0x00, 0x3F, 0xC0, 0x07, 0x80, 0x1F, 0xE0, 0x03, 0xC0, 0x0F, - 0xF0, 0x01, 0xE0, 0x07, 0xF8, 0x00, 0xF0, 0x03, 0xFC, 0x00, 0x78, 0x01, - 0xFE, 0x00, 0x3C, 0x00, 0xFF, 0x00, 0x1E, 0x00, 0x7F, 0x80, 0x0F, 0x00, - 0x3F, 0xC0, 0x07, 0x80, 0x1F, 0xE0, 0x03, 0xC0, 0x0F, 0xF0, 0x01, 0xE0, - 0x07, 0x80, 0xF0, 0xFF, 0x0F, 0x3F, 0xFC, 0xF7, 0xFF, 0xEF, 0x78, 0x7E, - 0xFE, 0x01, 0xFF, 0xC0, 0x1F, 0xF8, 0x00, 0xFF, 0x80, 0x0F, 0xF8, 0x00, - 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, - 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, - 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, - 0x00, 0x0F, 0xF0, 0x00, 0xF0, 0x03, 0xFE, 0x00, 0x3F, 0xFE, 0x01, 0xFF, - 0xFC, 0x0F, 0xE1, 0xF8, 0x3E, 0x01, 0xF1, 0xF0, 0x03, 0xC7, 0x80, 0x0F, - 0xBE, 0x00, 0x1E, 0xF0, 0x00, 0x7B, 0xC0, 0x00, 0xFF, 0x00, 0x03, 0xFC, - 0x00, 0x0F, 0xF0, 0x00, 0x3F, 0xC0, 0x00, 0xFF, 0x00, 0x03, 0xFC, 0x00, - 0x0F, 0xF0, 0x00, 0x7F, 0xC0, 0x01, 0xEF, 0x80, 0x07, 0x9E, 0x00, 0x3E, - 0x7C, 0x01, 0xF0, 0xF8, 0x0F, 0xC1, 0xFF, 0xFE, 0x07, 0xFF, 0xF0, 0x07, - 0xFF, 0x80, 0x07, 0xF8, 0x00, 0xE1, 0xFE, 0x03, 0x9F, 0xFE, 0x0E, 0xFF, - 0xFC, 0x3B, 0xE3, 0xF8, 0xFE, 0x03, 0xF3, 0xF0, 0x07, 0xCF, 0x80, 0x0F, - 0x3C, 0x00, 0x3E, 0xF0, 0x00, 0x7B, 0xC0, 0x01, 0xEF, 0x00, 0x07, 0xBC, - 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0x80, 0x01, 0xFF, 0x00, 0x07, 0xFC, 0x00, - 0x1E, 0xF0, 0x00, 0x7B, 0xC0, 0x01, 0xEF, 0x80, 0x0F, 0xBE, 0x00, 0x3C, - 0xFC, 0x01, 0xF3, 0xF8, 0x0F, 0x8E, 0xFF, 0xFE, 0x3B, 0xFF, 0xF0, 0xE3, - 0xFF, 0x83, 0x83, 0xF8, 0x0E, 0x00, 0x00, 0x38, 0x00, 0x00, 0xE0, 0x00, - 0x03, 0x80, 0x00, 0x0E, 0x00, 0x00, 0x38, 0x00, 0x00, 0xE0, 0x00, 0x03, - 0x80, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x1C, 0x1F, 0xFE, 0x70, - 0xFF, 0xFD, 0xC7, 0xF1, 0xFF, 0x3F, 0x01, 0xFC, 0xF8, 0x03, 0xF7, 0xC0, - 0x07, 0xDE, 0x00, 0x1F, 0x78, 0x00, 0x3D, 0xE0, 0x00, 0xFF, 0x00, 0x03, - 0xFC, 0x00, 0x0F, 0xF0, 0x00, 0x3F, 0xC0, 0x00, 0xFF, 0x00, 0x03, 0xFC, - 0x00, 0x0F, 0xF8, 0x00, 0x3D, 0xE0, 0x00, 0xF7, 0x80, 0x07, 0xDF, 0x00, - 0x1F, 0x3E, 0x00, 0xFC, 0xFC, 0x07, 0xF1, 0xFF, 0xFF, 0xC3, 0xFF, 0xEF, - 0x07, 0xFF, 0x3C, 0x07, 0xF0, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, - 0x00, 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x0F, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0xF0, 0xFF, 0x3F, 0xF7, 0xFF, - 0x7F, 0xFF, 0x0F, 0xC0, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x00, 0xF0, 0x0F, - 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, - 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0xF0, 0x00, 0x07, 0xFC, 0x01, - 0xFF, 0xF0, 0x3F, 0xFF, 0x87, 0xF1, 0xFC, 0x78, 0x07, 0xCF, 0x80, 0x3C, - 0xF0, 0x03, 0xEF, 0x00, 0x00, 0xF8, 0x00, 0x07, 0xC0, 0x00, 0x7F, 0x80, - 0x03, 0xFF, 0x80, 0x1F, 0xFF, 0x00, 0x7F, 0xF8, 0x00, 0x7F, 0xC0, 0x00, - 0x7E, 0x00, 0x01, 0xE0, 0x00, 0x1F, 0xF0, 0x01, 0xFF, 0x00, 0x1E, 0xF8, - 0x01, 0xEF, 0xC0, 0x3E, 0x7F, 0xFF, 0xC3, 0xFF, 0xF8, 0x1F, 0xFF, 0x00, - 0x7F, 0xC0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x3F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFC, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, - 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, - 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xF0, 0x3F, 0xC3, 0xF8, 0x3F, 0xF0, 0x00, - 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, - 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, - 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0xFF, - 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x1F, 0xF0, 0x01, 0xFF, 0x00, 0x3F, - 0xF8, 0x03, 0xFF, 0x80, 0x7F, 0x7F, 0x1E, 0xF7, 0xFF, 0xEF, 0x3F, 0xF8, - 0xF0, 0xFF, 0x00, 0x78, 0x00, 0x3E, 0xF0, 0x00, 0x79, 0xF0, 0x00, 0xF1, - 0xE0, 0x03, 0xE3, 0xC0, 0x07, 0x87, 0xC0, 0x0F, 0x07, 0x80, 0x3E, 0x0F, - 0x00, 0x78, 0x1F, 0x00, 0xF0, 0x1E, 0x03, 0xC0, 0x3C, 0x07, 0x80, 0x7C, - 0x0F, 0x00, 0x78, 0x3C, 0x00, 0xF0, 0x78, 0x01, 0xF1, 0xE0, 0x01, 0xE3, - 0xC0, 0x03, 0xC7, 0x80, 0x07, 0xDE, 0x00, 0x07, 0xBC, 0x00, 0x0F, 0x78, - 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x3E, 0x00, - 0x00, 0x7C, 0x00, 0xF8, 0x03, 0xE0, 0x07, 0xBC, 0x01, 0xF0, 0x03, 0xDE, - 0x00, 0xFC, 0x03, 0xEF, 0x00, 0x7E, 0x01, 0xE7, 0xC0, 0x7F, 0x00, 0xF1, - 0xE0, 0x3F, 0x80, 0x78, 0xF0, 0x1D, 0xE0, 0x78, 0x78, 0x0E, 0xF0, 0x3C, - 0x1E, 0x0F, 0x78, 0x1E, 0x0F, 0x07, 0x9C, 0x0F, 0x07, 0x83, 0x8F, 0x0F, - 0x01, 0xE1, 0xC7, 0x87, 0x80, 0xF1, 0xE3, 0xC3, 0xC0, 0x78, 0xF0, 0xE3, - 0xC0, 0x3C, 0x70, 0x79, 0xE0, 0x0F, 0x38, 0x3C, 0xF0, 0x07, 0xBC, 0x1E, - 0x78, 0x03, 0xDE, 0x07, 0x78, 0x00, 0xEE, 0x03, 0xFC, 0x00, 0x7F, 0x01, - 0xFE, 0x00, 0x3F, 0x80, 0xFE, 0x00, 0x1F, 0xC0, 0x3F, 0x00, 0x07, 0xC0, - 0x1F, 0x80, 0x03, 0xE0, 0x0F, 0x80, 0x01, 0xF0, 0x07, 0xC0, 0x00, 0xF8, - 0x00, 0xFB, 0xC0, 0x07, 0x8F, 0x00, 0x7C, 0x7C, 0x07, 0xC1, 0xE0, 0x3C, - 0x07, 0x83, 0xC0, 0x3E, 0x3E, 0x00, 0xF1, 0xE0, 0x03, 0xDE, 0x00, 0x1F, - 0xF0, 0x00, 0x7F, 0x00, 0x01, 0xF0, 0x00, 0x0F, 0x80, 0x00, 0x7E, 0x00, - 0x07, 0xF0, 0x00, 0x7F, 0xC0, 0x03, 0xDF, 0x00, 0x3C, 0x78, 0x03, 0xE3, - 0xE0, 0x1E, 0x0F, 0x81, 0xE0, 0x3C, 0x1F, 0x01, 0xF0, 0xF0, 0x07, 0xCF, - 0x00, 0x1E, 0xF8, 0x00, 0xF8, 0xF0, 0x00, 0x7F, 0xC0, 0x03, 0xDE, 0x00, - 0x3E, 0xF0, 0x01, 0xE7, 0x80, 0x0F, 0x1E, 0x00, 0xF8, 0xF0, 0x07, 0x87, - 0x80, 0x3C, 0x1E, 0x03, 0xC0, 0xF0, 0x1E, 0x07, 0x80, 0xF0, 0x1E, 0x0F, - 0x00, 0xF0, 0x78, 0x07, 0x83, 0xC0, 0x1E, 0x3C, 0x00, 0xF1, 0xE0, 0x07, - 0x9F, 0x00, 0x1E, 0xF0, 0x00, 0xF7, 0x80, 0x07, 0xF8, 0x00, 0x1F, 0xC0, - 0x00, 0xFE, 0x00, 0x07, 0xE0, 0x00, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x07, - 0x80, 0x00, 0x3C, 0x00, 0x03, 0xE0, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, - 0x0F, 0x00, 0x07, 0xF8, 0x00, 0x3F, 0x80, 0x01, 0xF8, 0x00, 0x0F, 0x80, - 0x00, 0x7F, 0xFF, 0xF7, 0xFF, 0xFF, 0x7F, 0xFF, 0xF7, 0xFF, 0xFF, 0x00, - 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0x00, - 0x03, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0x00, - 0x03, 0xE0, 0x00, 0x7C, 0x00, 0x07, 0x80, 0x00, 0xF8, 0x00, 0x1F, 0x00, - 0x03, 0xE0, 0x00, 0x7C, 0x00, 0x0F, 0x80, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xF0, 0x03, 0xE0, 0xFC, 0x3F, 0x87, 0x80, 0xE0, 0x1C, - 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, - 0x80, 0x70, 0x1E, 0x03, 0xC0, 0x78, 0x1E, 0x0F, 0xC1, 0xE0, 0x3E, 0x07, - 0xE0, 0x3C, 0x03, 0xC0, 0x78, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, - 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x78, 0x0F, - 0x01, 0xFC, 0x1F, 0x81, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF8, 0x1F, - 0x83, 0xF8, 0x07, 0x00, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, - 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x1E, - 0x03, 0xC0, 0x3E, 0x03, 0xC0, 0x78, 0x1F, 0x07, 0x80, 0xE0, 0x3C, 0x07, - 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0x80, - 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x1E, 0x1F, 0xC3, 0xF0, 0x7C, 0x00, 0x08, - 0x00, 0x03, 0xF0, 0x00, 0x7F, 0x80, 0x7F, 0xFE, 0x07, 0xE1, 0xF8, 0x7C, - 0x07, 0xFE, 0xC0, 0x3F, 0xE0, 0x00, 0xFC}; - -static const GFXglyph FreeSans24pt7bGlyphs[] = { - {0, 0, 0, 13, 0, 1} // ' ' - , - {0, 4, 34, 13, 6, -33} // '!' - , - {17, 12, 11, 17, 2, -32} // '"' - , - {34, 24, 34, 26, 1, -32} // '#' - , - {136, 22, 42, 26, 2, -35} // '$' - , - {252, 39, 34, 42, 1, -32} // '%' - , - {418, 28, 34, 31, 2, -32} // '&' - , - {537, 5, 11, 9, 2, -32} // ''' - , - {544, 11, 44, 16, 3, -33} // '(' - , - {605, 10, 44, 16, 2, -33} // ')' - , - {660, 14, 13, 18, 2, -33} // '*' - , - {683, 23, 22, 27, 2, -21} // '+' - , - {747, 5, 12, 13, 4, -4} // ',' - , - {755, 11, 4, 16, 2, -14} // '-' - , - {761, 5, 5, 13, 4, -4} // '.' - , - {765, 13, 35, 13, 0, -33} // '/' - , - {822, 22, 34, 26, 2, -32} // '0' - , - {916, 11, 34, 26, 5, -32} // '1' - , - {964, 22, 34, 26, 2, -32} // '2' - , - {1058, 22, 34, 26, 2, -32} // '3' - , - {1152, 23, 34, 26, 1, -32} // '4' - , - {1251, 22, 34, 26, 2, -32} // '5' - , - {1345, 22, 34, 26, 2, -32} // '6' - , - {1439, 22, 34, 26, 2, -32} // '7' - , - {1533, 22, 34, 26, 2, -32} // '8' - , - {1627, 22, 34, 26, 2, -32} // '9' - , - {1721, 5, 25, 13, 5, -24} // ':' - , - {1737, 5, 32, 13, 5, -24} // ';' - , - {1757, 23, 22, 27, 2, -21} // '<' - , - {1821, 23, 12, 27, 2, -16} // '=' - , - {1856, 23, 22, 27, 2, -21} // '>' - , - {1920, 20, 35, 26, 4, -34} // '?' - , - {2008, 43, 42, 48, 2, -34} // '@' - , - {2234, 30, 34, 31, 1, -33} // 'A' - , - {2362, 25, 34, 31, 4, -33} // 'B' - , - {2469, 30, 36, 34, 2, -34} // 'C' - , - {2604, 27, 34, 34, 4, -33} // 'D' - , - {2719, 25, 34, 31, 4, -33} // 'E' - , - {2826, 23, 34, 29, 4, -33} // 'F' - , - {2924, 31, 36, 37, 2, -34} // 'G' - , - {3064, 26, 34, 34, 4, -33} // 'H' - , - {3175, 4, 34, 13, 5, -33} // 'I' - , - {3192, 19, 35, 24, 1, -33} // 'J' - , - {3276, 27, 34, 31, 4, -33} // 'K' - , - {3391, 21, 34, 26, 4, -33} // 'L' - , - {3481, 32, 34, 39, 4, -33} // 'M' - , - {3617, 26, 34, 34, 4, -33} // 'N' - , - {3728, 33, 36, 37, 2, -34} // 'O' - , - {3877, 25, 34, 31, 4, -33} // 'P' - , - {3984, 33, 38, 37, 2, -34} // 'Q' - , - {4141, 28, 34, 34, 4, -33} // 'R' - , - {4260, 27, 36, 31, 2, -34} // 'S' - , - {4382, 27, 34, 29, 1, -33} // 'T' - , - {4497, 26, 35, 34, 4, -33} // 'U' - , - {4611, 29, 34, 31, 1, -33} // 'V' - , - {4735, 43, 34, 44, 1, -33} // 'W' - , - {4918, 30, 34, 31, 1, -33} // 'X' - , - {5046, 30, 34, 31, 1, -33} // 'Y' - , - {5174, 26, 34, 29, 1, -33} // 'Z' - , - {5285, 9, 44, 13, 3, -33} // '[' - , - {5335, 13, 35, 13, 0, -33} // '\' - , - {5392, 9, 44, 13, 1, -33} // ']' - , - {5442, 18, 18, 22, 2, -32} // '^' - , - {5483, 28, 2, 26, -1, 7} // '_' - , - {5490, 10, 7, 16, 1, -34} // '`' - , - {5499, 23, 26, 26, 2, -24} // 'a' - , - {5574, 22, 35, 26, 3, -33} // 'b' - , - {5671, 21, 26, 24, 1, -24} // 'c' - , - {5740, 22, 35, 26, 1, -33} // 'd' - , - {5837, 22, 26, 26, 2, -24} // 'e' - , - {5909, 11, 34, 13, 1, -33} // 'f' - , - {5956, 22, 35, 26, 1, -24} // 'g' - , - {6053, 20, 34, 26, 3, -33} // 'h' - , - {6138, 4, 34, 10, 3, -33} // 'i' - , - {6155, 8, 44, 10, -1, -33} // 'j' - , - {6199, 21, 34, 24, 3, -33} // 'k' - , - {6289, 4, 34, 10, 3, -33} // 'l' - , - {6306, 33, 25, 39, 3, -24} // 'm' - , - {6410, 20, 25, 26, 3, -24} // 'n' - , - {6473, 22, 26, 26, 2, -24} // 'o' - , - {6545, 22, 35, 26, 3, -24} // 'p' - , - {6642, 22, 35, 26, 1, -24} // 'q' - , - {6739, 12, 25, 16, 3, -24} // 'r' - , - {6777, 20, 26, 24, 2, -24} // 's' - , - {6842, 11, 32, 13, 1, -30} // 't' - , - {6886, 20, 26, 26, 3, -24} // 'u' - , - {6951, 23, 25, 24, 0, -24} // 'v' - , - {7023, 33, 25, 34, 0, -24} // 'w' - , - {7127, 21, 25, 24, 1, -24} // 'x' - , - {7193, 21, 35, 24, 1, -24} // 'y' - , - {7285, 20, 25, 24, 1, -24} // 'z' - , - {7348, 11, 44, 16, 2, -33} // '{' - , - {7409, 3, 44, 12, 5, -33} // '|' - , - {7426, 11, 44, 16, 1, -33} // '}' - , - {7487, 20, 8, 27, 4, -20} // '~' -}; - -static const GFXfont FreeSans24pt7b = { - (const uint8_t *)FreeSans24pt7bBitmaps, - (const GFXglyph *)FreeSans24pt7bGlyphs, - 0x20, 0x7E, 65}; - -static const uint8_t FreeSans9pt7bBitmaps[] = { - 0xFF, 0xFF, 0xF8, 0xC0, 0xDE, 0xF7, 0x20, 0x09, 0x86, 0x41, 0x91, 0xFF, - 0x13, 0x04, 0xC3, 0x20, 0xC8, 0xFF, 0x89, 0x82, 0x61, 0x90, 0x10, 0x1F, - 0x14, 0xDA, 0x3D, 0x1E, 0x83, 0x40, 0x78, 0x17, 0x08, 0xF4, 0x7A, 0x35, - 0x33, 0xF0, 0x40, 0x20, 0x38, 0x10, 0xEC, 0x20, 0xC6, 0x20, 0xC6, 0x40, - 0xC6, 0x40, 0x6C, 0x80, 0x39, 0x00, 0x01, 0x3C, 0x02, 0x77, 0x02, 0x63, - 0x04, 0x63, 0x04, 0x77, 0x08, 0x3C, 0x0E, 0x06, 0x60, 0xCC, 0x19, 0x81, - 0xE0, 0x18, 0x0F, 0x03, 0x36, 0xC2, 0xD8, 0x73, 0x06, 0x31, 0xE3, 0xC4, - 0xFE, 0x13, 0x26, 0x6C, 0xCC, 0xCC, 0xC4, 0x66, 0x23, 0x10, 0x8C, 0x46, - 0x63, 0x33, 0x33, 0x32, 0x66, 0x4C, 0x80, 0x25, 0x7E, 0xA5, 0x00, 0x30, - 0xC3, 0x3F, 0x30, 0xC3, 0x0C, 0xD6, 0xF0, 0xC0, 0x08, 0x44, 0x21, 0x10, - 0x84, 0x42, 0x11, 0x08, 0x00, 0x3C, 0x66, 0x42, 0xC3, 0xC3, 0xC3, 0xC3, - 0xC3, 0xC3, 0xC3, 0x42, 0x66, 0x3C, 0x11, 0x3F, 0x33, 0x33, 0x33, 0x33, - 0x30, 0x3E, 0x31, 0xB0, 0x78, 0x30, 0x18, 0x1C, 0x1C, 0x1C, 0x18, 0x18, - 0x10, 0x08, 0x07, 0xF8, 0x3C, 0x66, 0xC3, 0xC3, 0x03, 0x06, 0x1C, 0x07, - 0x03, 0xC3, 0xC3, 0x66, 0x3C, 0x0C, 0x18, 0x71, 0x62, 0xC9, 0xA3, 0x46, - 0xFE, 0x18, 0x30, 0x60, 0xC0, 0x7F, 0x20, 0x10, 0x08, 0x08, 0x07, 0xF3, - 0x8C, 0x03, 0x01, 0x80, 0xF0, 0x6C, 0x63, 0xE0, 0x1E, 0x31, 0x98, 0x78, - 0x0C, 0x06, 0xF3, 0x8D, 0x83, 0xC1, 0xE0, 0xD0, 0x6C, 0x63, 0xE0, 0xFF, - 0x03, 0x02, 0x06, 0x04, 0x0C, 0x08, 0x18, 0x18, 0x18, 0x10, 0x30, 0x30, - 0x3E, 0x31, 0xB0, 0x78, 0x3C, 0x1B, 0x18, 0xF8, 0xC6, 0xC1, 0xE0, 0xF0, - 0x6C, 0x63, 0xE0, 0x3C, 0x66, 0xC2, 0xC3, 0xC3, 0xC3, 0x67, 0x3B, 0x03, - 0x03, 0xC2, 0x66, 0x3C, 0xC0, 0x00, 0x30, 0xC0, 0x00, 0x00, 0x64, 0xA0, - 0x00, 0x81, 0xC7, 0x8E, 0x0C, 0x07, 0x80, 0x70, 0x0E, 0x01, 0x80, 0xFF, - 0x80, 0x00, 0x1F, 0xF0, 0x00, 0x70, 0x0E, 0x01, 0xC0, 0x18, 0x38, 0x71, - 0xC0, 0x80, 0x00, 0x3E, 0x31, 0xB0, 0x78, 0x30, 0x18, 0x18, 0x38, 0x18, - 0x18, 0x0C, 0x00, 0x00, 0x01, 0x80, 0x03, 0xF0, 0x06, 0x0E, 0x06, 0x01, - 0x86, 0x00, 0x66, 0x1D, 0xBB, 0x31, 0xCF, 0x18, 0xC7, 0x98, 0x63, 0xCC, - 0x31, 0xE6, 0x11, 0xB3, 0x99, 0xCC, 0xF7, 0x86, 0x00, 0x01, 0x80, 0x00, - 0x70, 0x40, 0x0F, 0xE0, 0x06, 0x00, 0xF0, 0x0F, 0x00, 0x90, 0x19, 0x81, - 0x98, 0x10, 0x83, 0x0C, 0x3F, 0xC2, 0x04, 0x60, 0x66, 0x06, 0xC0, 0x30, - 0xFF, 0x18, 0x33, 0x03, 0x60, 0x6C, 0x0D, 0x83, 0x3F, 0xC6, 0x06, 0xC0, - 0x78, 0x0F, 0x01, 0xE0, 0x6F, 0xF8, 0x1F, 0x86, 0x19, 0x81, 0xA0, 0x3C, - 0x01, 0x80, 0x30, 0x06, 0x00, 0xC0, 0x68, 0x0D, 0x83, 0x18, 0x61, 0xF0, - 0xFF, 0x18, 0x33, 0x03, 0x60, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, - 0x78, 0x0F, 0x03, 0x60, 0xCF, 0xF0, 0xFF, 0xE0, 0x30, 0x18, 0x0C, 0x06, - 0x03, 0xFD, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x0F, 0xF8, 0xFF, 0xC0, 0xC0, - 0xC0, 0xC0, 0xC0, 0xFE, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x0F, 0x83, - 0x0E, 0x60, 0x66, 0x03, 0xC0, 0x0C, 0x00, 0xC1, 0xFC, 0x03, 0xC0, 0x36, - 0x03, 0x60, 0x73, 0x0F, 0x0F, 0x10, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, - 0x07, 0x80, 0xFF, 0xFE, 0x03, 0xC0, 0x78, 0x0F, 0x01, 0xE0, 0x3C, 0x06, - 0xFF, 0xFF, 0xFF, 0xC0, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC1, 0x83, 0x07, - 0x8F, 0x1E, 0x27, 0x80, 0xC0, 0xD8, 0x33, 0x0C, 0x63, 0x0C, 0xC1, 0xB8, - 0x3F, 0x07, 0x30, 0xC3, 0x18, 0x63, 0x06, 0x60, 0x6C, 0x0C, 0xC0, 0xC0, - 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFF, 0xE0, - 0x3F, 0x01, 0xFC, 0x1F, 0xE0, 0xFD, 0x05, 0xEC, 0x6F, 0x63, 0x79, 0x13, - 0xCD, 0x9E, 0x6C, 0xF1, 0x47, 0x8E, 0x3C, 0x71, 0x80, 0xE0, 0x7C, 0x0F, - 0xC1, 0xE8, 0x3D, 0x87, 0x98, 0xF1, 0x1E, 0x33, 0xC3, 0x78, 0x6F, 0x07, - 0xE0, 0x7C, 0x0E, 0x0F, 0x81, 0x83, 0x18, 0x0C, 0xC0, 0x6C, 0x01, 0xE0, - 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1B, 0x01, 0x98, 0x0C, 0x60, 0xC0, 0xF8, - 0x00, 0xFF, 0x30, 0x6C, 0x0F, 0x03, 0xC0, 0xF0, 0x6F, 0xF3, 0x00, 0xC0, - 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x00, 0x0F, 0x81, 0x83, 0x18, 0x0C, 0xC0, - 0x6C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x1B, 0x01, 0x98, 0x6C, - 0x60, 0xC0, 0xFB, 0x00, 0x08, 0xFF, 0x8C, 0x0E, 0xC0, 0x6C, 0x06, 0xC0, - 0x6C, 0x0C, 0xFF, 0x8C, 0x0E, 0xC0, 0x6C, 0x06, 0xC0, 0x6C, 0x06, 0xC0, - 0x70, 0x3F, 0x18, 0x6C, 0x0F, 0x03, 0xC0, 0x1E, 0x01, 0xF0, 0x0E, 0x00, - 0xF0, 0x3C, 0x0D, 0x86, 0x3F, 0x00, 0xFF, 0x86, 0x03, 0x01, 0x80, 0xC0, - 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x80, 0xC0, 0xC0, 0x78, 0x0F, - 0x01, 0xE0, 0x3C, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xC0, 0x78, 0x0F, 0x01, - 0xB0, 0x61, 0xF0, 0xC0, 0x6C, 0x0D, 0x81, 0x10, 0x63, 0x0C, 0x61, 0x04, - 0x60, 0xCC, 0x19, 0x01, 0x60, 0x3C, 0x07, 0x00, 0x60, 0xC1, 0x81, 0x30, - 0xE1, 0x98, 0x70, 0xCC, 0x28, 0x66, 0x26, 0x21, 0x13, 0x30, 0xC8, 0x98, - 0x6C, 0x4C, 0x14, 0x34, 0x0A, 0x1A, 0x07, 0x07, 0x03, 0x03, 0x80, 0x81, - 0x80, 0x60, 0x63, 0x0C, 0x30, 0xC1, 0x98, 0x0F, 0x00, 0xE0, 0x06, 0x00, - 0xF0, 0x19, 0x01, 0x98, 0x30, 0xC6, 0x0E, 0x60, 0x60, 0xC0, 0x36, 0x06, - 0x30, 0xC3, 0x0C, 0x19, 0x81, 0xD8, 0x0F, 0x00, 0x60, 0x06, 0x00, 0x60, - 0x06, 0x00, 0x60, 0x06, 0x00, 0xFF, 0xC0, 0x60, 0x30, 0x0C, 0x06, 0x03, - 0x01, 0xC0, 0x60, 0x30, 0x18, 0x06, 0x03, 0x00, 0xFF, 0xC0, 0xFB, 0x6D, - 0xB6, 0xDB, 0x6D, 0xB6, 0xE0, 0x84, 0x10, 0x84, 0x10, 0x84, 0x10, 0x84, - 0x10, 0x80, 0xED, 0xB6, 0xDB, 0x6D, 0xB6, 0xDB, 0xE0, 0x30, 0x60, 0xA2, - 0x44, 0xD8, 0xA1, 0x80, 0xFF, 0xC0, 0xC6, 0x30, 0x7E, 0x71, 0xB0, 0xC0, - 0x60, 0xF3, 0xDB, 0x0D, 0x86, 0xC7, 0x3D, 0xC0, 0xC0, 0x60, 0x30, 0x1B, - 0xCE, 0x36, 0x0F, 0x07, 0x83, 0xC1, 0xE0, 0xF0, 0x7C, 0x6D, 0xE0, 0x3C, - 0x66, 0xC3, 0xC0, 0xC0, 0xC0, 0xC0, 0xC3, 0x66, 0x3C, 0x03, 0x03, 0x03, - 0x3B, 0x67, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0x67, 0x3B, 0x3C, 0x66, - 0xC3, 0xC3, 0xFF, 0xC0, 0xC0, 0xC3, 0x66, 0x3C, 0x36, 0x6F, 0x66, 0x66, - 0x66, 0x66, 0x60, 0x3B, 0x67, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0x67, - 0x3B, 0x03, 0x03, 0xC6, 0x7C, 0xC0, 0xC0, 0xC0, 0xDE, 0xE3, 0xC3, 0xC3, - 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xFF, 0xFF, 0xC0, 0x30, 0x03, - 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0xE0, 0xC0, 0x60, 0x30, 0x18, 0x4C, - 0x46, 0x63, 0x61, 0xF0, 0xEC, 0x62, 0x31, 0x98, 0x6C, 0x30, 0xFF, 0xFF, - 0xFF, 0xC0, 0xDE, 0xF7, 0x1C, 0xF0, 0xC7, 0x86, 0x3C, 0x31, 0xE1, 0x8F, - 0x0C, 0x78, 0x63, 0xC3, 0x1E, 0x18, 0xC0, 0xDE, 0xE3, 0xC3, 0xC3, 0xC3, - 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0x3C, 0x66, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, - 0xC3, 0x66, 0x3C, 0xDE, 0x71, 0xB0, 0x78, 0x3C, 0x1E, 0x0F, 0x07, 0x83, - 0xE3, 0x6F, 0x30, 0x18, 0x0C, 0x00, 0x3B, 0x67, 0xC3, 0xC3, 0xC3, 0xC3, - 0xC3, 0xC3, 0x67, 0x3B, 0x03, 0x03, 0x03, 0xDF, 0x31, 0x8C, 0x63, 0x18, - 0xC6, 0x00, 0x3E, 0xE3, 0xC0, 0xC0, 0xE0, 0x3C, 0x07, 0xC3, 0xE3, 0x7E, - 0x66, 0xF6, 0x66, 0x66, 0x66, 0x67, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, - 0xC3, 0xC3, 0xC7, 0x7B, 0xC1, 0xA0, 0x98, 0xCC, 0x42, 0x21, 0xB0, 0xD0, - 0x28, 0x1C, 0x0C, 0x00, 0xC6, 0x1E, 0x38, 0x91, 0xC4, 0xCA, 0x66, 0xD3, - 0x16, 0xD0, 0xA6, 0x87, 0x1C, 0x38, 0xC0, 0xC6, 0x00, 0x43, 0x62, 0x36, - 0x1C, 0x18, 0x1C, 0x3C, 0x26, 0x62, 0x43, 0xC1, 0x21, 0x98, 0xCC, 0x42, - 0x61, 0xB0, 0xD0, 0x38, 0x1C, 0x0C, 0x06, 0x03, 0x01, 0x03, 0x00, 0xFE, - 0x0C, 0x30, 0xC1, 0x86, 0x18, 0x20, 0xC1, 0xFC, 0x36, 0x66, 0x66, 0x6E, - 0xCE, 0x66, 0x66, 0x66, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xC6, 0x66, - 0x66, 0x67, 0x37, 0x66, 0x66, 0x66, 0xC0, 0x61, 0x24, 0x38 -}; - -static const GFXglyph FreeSans9pt7bGlyphs[] = { - { 0, 0, 0, 5, 0, 1 } // ' ' - ,{ 0, 2, 13, 6, 2, -12 } // '!' - ,{ 4, 5, 4, 6, 1, -12 } // '"' - ,{ 7, 10, 12, 10, 0, -11 } // '#' - ,{ 22, 9, 16, 10, 1, -13 } // '$' - ,{ 40, 16, 13, 18, 1, -12 } // '%' - ,{ 66, 11, 13, 12, 1, -12 } // '&' - ,{ 84, 2, 4, 4, 1, -12 } // ''' - ,{ 85, 4, 17, 6, 1, -12 } // '(' - ,{ 94, 4, 17, 6, 1, -12 } // ')' - ,{ 103, 5, 5, 7, 1, -12 } // '*' - ,{ 107, 6, 8, 11, 3, -7 } // '+' - ,{ 113, 2, 4, 5, 2, 0 } // ',' - ,{ 114, 4, 1, 6, 1, -4 } // '-' - ,{ 115, 2, 1, 5, 1, 0 } // '.' - ,{ 116, 5, 13, 5, 0, -12 } // '/' - ,{ 125, 8, 13, 10, 1, -12 } // '0' - ,{ 138, 4, 13, 10, 3, -12 } // '1' - ,{ 145, 9, 13, 10, 1, -12 } // '2' - ,{ 160, 8, 13, 10, 1, -12 } // '3' - ,{ 173, 7, 13, 10, 2, -12 } // '4' - ,{ 185, 9, 13, 10, 1, -12 } // '5' - ,{ 200, 9, 13, 10, 1, -12 } // '6' - ,{ 215, 8, 13, 10, 0, -12 } // '7' - ,{ 228, 9, 13, 10, 1, -12 } // '8' - ,{ 243, 8, 13, 10, 1, -12 } // '9' - ,{ 256, 2, 10, 5, 1, -9 } // ':' - ,{ 259, 3, 12, 5, 1, -8 } // ';' - ,{ 264, 9, 9, 11, 1, -8 } // '<' - ,{ 275, 9, 4, 11, 1, -5 } // '=' - ,{ 280, 9, 9, 11, 1, -8 } // '>' - ,{ 291, 9, 13, 10, 1, -12 } // '?' - ,{ 306, 17, 16, 18, 1, -12 } // '@' - ,{ 340, 12, 13, 12, 0, -12 } // 'A' - ,{ 360, 11, 13, 12, 1, -12 } // 'B' - ,{ 378, 11, 13, 13, 1, -12 } // 'C' - ,{ 396, 11, 13, 13, 1, -12 } // 'D' - ,{ 414, 9, 13, 11, 1, -12 } // 'E' - ,{ 429, 8, 13, 11, 1, -12 } // 'F' - ,{ 442, 12, 13, 14, 1, -12 } // 'G' - ,{ 462, 11, 13, 13, 1, -12 } // 'H' - ,{ 480, 2, 13, 5, 2, -12 } // 'I' - ,{ 484, 7, 13, 10, 1, -12 } // 'J' - ,{ 496, 11, 13, 12, 1, -12 } // 'K' - ,{ 514, 8, 13, 10, 1, -12 } // 'L' - ,{ 527, 13, 13, 15, 1, -12 } // 'M' - ,{ 549, 11, 13, 13, 1, -12 } // 'N' - ,{ 567, 13, 13, 14, 1, -12 } // 'O' - ,{ 589, 10, 13, 12, 1, -12 } // 'P' - ,{ 606, 13, 14, 14, 1, -12 } // 'Q' - ,{ 629, 12, 13, 13, 1, -12 } // 'R' - ,{ 649, 10, 13, 12, 1, -12 } // 'S' - ,{ 666, 9, 13, 11, 1, -12 } // 'T' - ,{ 681, 11, 13, 13, 1, -12 } // 'U' - ,{ 699, 11, 13, 12, 0, -12 } // 'V' - ,{ 717, 17, 13, 17, 0, -12 } // 'W' - ,{ 745, 12, 13, 12, 0, -12 } // 'X' - ,{ 765, 12, 13, 12, 0, -12 } // 'Y' - ,{ 785, 10, 13, 11, 1, -12 } // 'Z' - ,{ 802, 3, 17, 5, 1, -12 } // '[' - ,{ 809, 5, 13, 5, 0, -12 } // '\' - ,{ 818, 3, 17, 5, 0, -12 } // ']' - ,{ 825, 7, 7, 8, 1, -12 } // '^' - ,{ 832, 10, 1, 10, 0, 3 } // '_' - ,{ 834, 4, 3, 5, 0, -12 } // '`' - ,{ 836, 9, 10, 10, 1, -9 } // 'a' - ,{ 848, 9, 13, 10, 1, -12 } // 'b' - ,{ 863, 8, 10, 9, 1, -9 } // 'c' - ,{ 873, 8, 13, 10, 1, -12 } // 'd' - ,{ 886, 8, 10, 10, 1, -9 } // 'e' - ,{ 896, 4, 13, 5, 1, -12 } // 'f' - ,{ 903, 8, 14, 10, 1, -9 } // 'g' - ,{ 917, 8, 13, 10, 1, -12 } // 'h' - ,{ 930, 2, 13, 4, 1, -12 } // 'i' - ,{ 934, 4, 17, 4, 0, -12 } // 'j' - ,{ 943, 9, 13, 9, 1, -12 } // 'k' - ,{ 958, 2, 13, 4, 1, -12 } // 'l' - ,{ 962, 13, 10, 15, 1, -9 } // 'm' - ,{ 979, 8, 10, 10, 1, -9 } // 'n' - ,{ 989, 8, 10, 10, 1, -9 } // 'o' - ,{ 999, 9, 13, 10, 1, -9 } // 'p' - ,{ 1014, 8, 13, 10, 1, -9 } // 'q' - ,{ 1027, 5, 10, 6, 1, -9 } // 'r' - ,{ 1034, 8, 10, 9, 1, -9 } // 's' - ,{ 1044, 4, 12, 5, 1, -11 } // 't' - ,{ 1050, 8, 10, 10, 1, -9 } // 'u' - ,{ 1060, 9, 10, 9, 0, -9 } // 'v' - ,{ 1072, 13, 10, 13, 0, -9 } // 'w' - ,{ 1089, 8, 10, 9, 0, -9 } // 'x' - ,{ 1099, 9, 14, 9, 0, -9 } // 'y' - ,{ 1115, 7, 10, 9, 1, -9 } // 'z' - ,{ 1124, 4, 17, 6, 1, -12 } // '{' - ,{ 1133, 2, 17, 4, 2, -12 } // '|' - ,{ 1138, 4, 17, 6, 1, -12 } // '}' - ,{ 1147, 7, 3, 9, 1, -7 } // '~' -}; - -static const GFXfont FreeSans9pt7b = { - (const uint8_t *)FreeSans9pt7bBitmaps, - (const GFXglyph *)FreeSans9pt7bGlyphs, 0x20, 0x7e, 22}; - -static const uint8_t FreeSans36pt7bBitmaps[] = { - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFB, 0xEF, 0x9E, - 0x79, 0xE7, 0x9E, 0x79, 0xC7, 0x1C, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0x07, 0xFF, 0xC1, 0xFF, 0xF0, 0x7F, - 0xFC, 0x1F, 0xFF, 0x07, 0xFF, 0xC1, 0xFF, 0xF0, 0x7F, 0xFC, 0x1F, 0xBF, - 0x07, 0xEF, 0xC0, 0xFB, 0xF0, 0x3E, 0x78, 0x0F, 0x9E, 0x03, 0xC7, 0x80, - 0xF1, 0xE0, 0x1C, 0x78, 0x07, 0x00, 0x00, 0x03, 0xE0, 0x0F, 0x80, 0x00, - 0x3F, 0x00, 0x7C, 0x00, 0x01, 0xF8, 0x07, 0xE0, 0x00, 0x0F, 0x80, 0x3F, - 0x00, 0x00, 0x7C, 0x01, 0xF8, 0x00, 0x03, 0xE0, 0x0F, 0x80, 0x00, 0x3F, - 0x00, 0x7C, 0x00, 0x01, 0xF8, 0x03, 0xE0, 0x00, 0x0F, 0xC0, 0x3F, 0x00, - 0x00, 0x7C, 0x01, 0xF8, 0x00, 0x03, 0xE0, 0x0F, 0x80, 0x00, 0x1F, 0x00, - 0x7C, 0x00, 0x01, 0xF8, 0x03, 0xE0, 0x0F, 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, - 0xFF, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, - 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x0F, 0xC0, 0x3F, 0x00, 0x00, 0x7E, - 0x01, 0xF8, 0x00, 0x03, 0xE0, 0x0F, 0xC0, 0x00, 0x1F, 0x00, 0x7C, 0x00, - 0x00, 0xF8, 0x03, 0xE0, 0x00, 0x0F, 0xC0, 0x1F, 0x00, 0x00, 0x7E, 0x01, - 0xF8, 0x00, 0x03, 0xE0, 0x0F, 0xC0, 0x00, 0x1F, 0x00, 0x7C, 0x00, 0x00, - 0xF8, 0x03, 0xE0, 0x00, 0x0F, 0xC0, 0x1F, 0x00, 0x00, 0x7E, 0x00, 0xF8, - 0x00, 0x03, 0xF0, 0x0F, 0xC0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, - 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xF8, - 0x03, 0xF0, 0x0F, 0xC0, 0x00, 0x1F, 0x00, 0x7E, 0x00, 0x00, 0xF8, 0x03, - 0xF0, 0x00, 0x07, 0xC0, 0x1F, 0x00, 0x00, 0x7E, 0x00, 0xF8, 0x00, 0x03, - 0xF0, 0x07, 0xC0, 0x00, 0x1F, 0x80, 0x7E, 0x00, 0x00, 0xF8, 0x03, 0xF0, - 0x00, 0x07, 0xC0, 0x1F, 0x00, 0x00, 0x3E, 0x00, 0xF8, 0x00, 0x03, 0xF0, - 0x07, 0xC0, 0x00, 0x1F, 0x80, 0x7E, 0x00, 0x00, 0xF8, 0x03, 0xF0, 0x00, - 0x07, 0xC0, 0x1F, 0x80, 0x00, 0x3E, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x01, - 0xE0, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, - 0x00, 0xF0, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x7F, 0xFF, 0x00, - 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, - 0xFC, 0x01, 0xFF, 0xBC, 0x7F, 0x80, 0x7F, 0x87, 0x83, 0xF8, 0x0F, 0xE0, - 0xF0, 0x3F, 0x83, 0xF8, 0x1E, 0x03, 0xF0, 0x7E, 0x03, 0xC0, 0x7F, 0x0F, - 0xC0, 0x78, 0x07, 0xE3, 0xF0, 0x0F, 0x00, 0xFC, 0x7E, 0x01, 0xE0, 0x1F, - 0x8F, 0xC0, 0x3C, 0x01, 0xF1, 0xF8, 0x07, 0x80, 0x00, 0x3F, 0x00, 0xF0, - 0x00, 0x07, 0xE0, 0x1E, 0x00, 0x00, 0x7E, 0x03, 0xC0, 0x00, 0x0F, 0xE0, - 0x78, 0x00, 0x01, 0xFE, 0x0F, 0x00, 0x00, 0x1F, 0xE1, 0xE0, 0x00, 0x03, - 0xFF, 0x3C, 0x00, 0x00, 0x3F, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0xFE, 0x00, - 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x01, 0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, - 0xFE, 0x00, 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0x01, 0xFF, 0xFF, 0x00, 0x00, - 0x3C, 0xFF, 0xE0, 0x00, 0x07, 0x87, 0xFE, 0x00, 0x00, 0xF0, 0x3F, 0xE0, - 0x00, 0x1E, 0x01, 0xFC, 0x00, 0x03, 0xC0, 0x1F, 0x80, 0x00, 0x78, 0x03, - 0xF8, 0x00, 0x0F, 0x00, 0x3F, 0xFC, 0x01, 0xE0, 0x07, 0xFF, 0x80, 0x3C, - 0x00, 0xFF, 0xF0, 0x07, 0x80, 0x1F, 0xFE, 0x00, 0xF0, 0x03, 0xF7, 0xC0, - 0x1E, 0x00, 0x7E, 0xFC, 0x03, 0xC0, 0x1F, 0x9F, 0x80, 0x78, 0x03, 0xF3, - 0xF8, 0x0F, 0x00, 0xFE, 0x3F, 0x01, 0xE0, 0x1F, 0x87, 0xF0, 0x3C, 0x07, - 0xF0, 0x7F, 0x87, 0x83, 0xFC, 0x0F, 0xFE, 0xF3, 0xFF, 0x00, 0xFF, 0xFF, - 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x03, - 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, - 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x1E, 0x00, - 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x0F, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x03, 0x80, - 0x00, 0x00, 0x1F, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x03, 0xC0, 0x00, - 0x03, 0xFF, 0xF0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, - 0x1E, 0x00, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x07, 0xC0, 0x00, 0x0F, 0xF8, - 0xFF, 0x00, 0x00, 0xF0, 0x00, 0x01, 0xF8, 0x07, 0xF0, 0x00, 0x3E, 0x00, - 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x0F, 0x80, 0x00, 0x0F, 0x80, 0x07, 0xE0, - 0x01, 0xF0, 0x00, 0x03, 0xF0, 0x00, 0x7C, 0x00, 0x7C, 0x00, 0x00, 0x7C, - 0x00, 0x0F, 0x80, 0x0F, 0x80, 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x03, 0xE0, - 0x00, 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x78, 0x00, 0x00, 0x3E, 0x00, 0x07, - 0xC0, 0x1F, 0x00, 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x03, 0xC0, 0x00, 0x00, - 0xFC, 0x00, 0x1F, 0x00, 0xF8, 0x00, 0x00, 0x0F, 0x80, 0x07, 0xE0, 0x1E, - 0x00, 0x00, 0x01, 0xF8, 0x01, 0xF8, 0x07, 0xC0, 0x00, 0x00, 0x1F, 0x80, - 0x7F, 0x01, 0xF0, 0x00, 0x00, 0x03, 0xFE, 0x3F, 0xC0, 0x3E, 0x00, 0x00, - 0x00, 0x3F, 0xFF, 0xF0, 0x0F, 0x80, 0x00, 0x00, 0x03, 0xFF, 0xFC, 0x01, - 0xF0, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x01, - 0xFF, 0x80, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x03, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x07, 0xFF, 0x80, - 0x00, 0x00, 0x00, 0xF8, 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x1E, 0x00, - 0x7F, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xC0, 0x1F, 0xFF, 0xF8, 0x00, 0x00, - 0x01, 0xF0, 0x07, 0xF8, 0x7F, 0x80, 0x00, 0x00, 0x3E, 0x01, 0xFC, 0x03, - 0xF8, 0x00, 0x00, 0x0F, 0x80, 0x3F, 0x00, 0x3F, 0x00, 0x00, 0x01, 0xF0, - 0x0F, 0xC0, 0x03, 0xE0, 0x00, 0x00, 0x7C, 0x01, 0xF0, 0x00, 0x3E, 0x00, - 0x00, 0x0F, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0x03, 0xE0, 0x07, 0xC0, - 0x00, 0xF8, 0x00, 0x00, 0x78, 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x00, 0x1F, - 0x00, 0x1F, 0x00, 0x03, 0xE0, 0x00, 0x03, 0xC0, 0x03, 0xE0, 0x00, 0x7C, - 0x00, 0x00, 0xF8, 0x00, 0x7C, 0x00, 0x1F, 0x80, 0x00, 0x3E, 0x00, 0x07, - 0xC0, 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0x01, - 0xF0, 0x00, 0x0F, 0xC0, 0x7F, 0x00, 0x00, 0x3E, 0x00, 0x01, 0xFF, 0xFF, - 0xE0, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x01, 0xE0, 0x00, - 0x01, 0xFF, 0xFE, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, - 0x0F, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, - 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x00, 0x1F, - 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x3F, - 0x80, 0x00, 0x0F, 0xE0, 0x0F, 0xC0, 0x00, 0x07, 0xE0, 0x03, 0xF0, 0x00, - 0x03, 0xF0, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x01, 0xF8, - 0x00, 0x3E, 0x00, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x00, 0x3E, 0x00, 0x1F, - 0x80, 0x00, 0x1F, 0x80, 0x0F, 0xC0, 0x00, 0x0F, 0xC0, 0x0F, 0xE0, 0x00, - 0x03, 0xF0, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x0F, 0xF0, 0x00, 0x00, 0x7F, - 0x0F, 0xF0, 0x00, 0x00, 0x3F, 0x8F, 0xF0, 0x00, 0x00, 0x0F, 0xFF, 0xF0, - 0x00, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, - 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0xFF, - 0xF0, 0x00, 0x00, 0x01, 0xFF, 0xFC, 0x00, 0x00, 0x01, 0xFF, 0x7F, 0x00, - 0x7E, 0x01, 0xFE, 0x3F, 0xC0, 0x3F, 0x01, 0xFE, 0x0F, 0xF0, 0x1F, 0x81, - 0xFE, 0x03, 0xFC, 0x0F, 0x81, 0xFE, 0x00, 0xFE, 0x0F, 0xC0, 0xFE, 0x00, - 0x3F, 0x87, 0xE0, 0xFE, 0x00, 0x1F, 0xE3, 0xF0, 0x7E, 0x00, 0x07, 0xFB, - 0xF0, 0x3F, 0x00, 0x01, 0xFF, 0xF8, 0x1F, 0x80, 0x00, 0x7F, 0xFC, 0x0F, - 0xC0, 0x00, 0x1F, 0xFC, 0x07, 0xE0, 0x00, 0x0F, 0xFE, 0x03, 0xF0, 0x00, - 0x03, 0xFE, 0x01, 0xF8, 0x00, 0x00, 0xFF, 0x00, 0xFC, 0x00, 0x00, 0x7F, - 0xC0, 0x7F, 0x00, 0x00, 0x7F, 0xE0, 0x3F, 0xC0, 0x00, 0x7F, 0xF8, 0x0F, - 0xE0, 0x00, 0x7F, 0xFE, 0x07, 0xFC, 0x00, 0xFF, 0xFF, 0x81, 0xFF, 0x81, - 0xFF, 0x9F, 0xE0, 0x7F, 0xFF, 0xFF, 0x87, 0xF0, 0x3F, 0xFF, 0xFF, 0x81, - 0xFC, 0x07, 0xFF, 0xFF, 0x00, 0xFF, 0x01, 0xFF, 0xFF, 0x00, 0x3F, 0xC0, - 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0xFD, 0xFB, 0xE7, 0xC7, 0x8F, 0x1E, - 0x38, 0x00, 0x0F, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x7C, 0x00, 0x78, 0x00, - 0xF8, 0x00, 0xF0, 0x01, 0xF0, 0x01, 0xE0, 0x03, 0xE0, 0x03, 0xC0, 0x07, - 0xC0, 0x07, 0xC0, 0x0F, 0x80, 0x0F, 0x80, 0x0F, 0x80, 0x1F, 0x00, 0x1F, - 0x00, 0x1F, 0x00, 0x3F, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x7E, 0x00, 0x7E, - 0x00, 0x7E, 0x00, 0x7C, 0x00, 0x7C, 0x00, 0x7C, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0x7C, 0x00, 0x7C, 0x00, 0x7C, - 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x3E, - 0x00, 0x3F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x80, 0x0F, 0x80, 0x0F, - 0x80, 0x07, 0xC0, 0x07, 0xC0, 0x07, 0xC0, 0x03, 0xE0, 0x03, 0xE0, 0x01, - 0xF0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x78, 0x00, 0x7C, 0x00, 0x3C, 0x00, - 0x1E, 0x00, 0x1E, 0xF0, 0x01, 0xF0, 0x01, 0xE0, 0x01, 0xE0, 0x03, 0xE0, - 0x03, 0xC0, 0x07, 0xC0, 0x07, 0x80, 0x0F, 0x80, 0x1F, 0x00, 0x1F, 0x00, - 0x3E, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x00, 0xF8, 0x01, 0xF0, 0x03, - 0xE0, 0x07, 0xE0, 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x80, 0x3F, 0x00, 0x3E, - 0x00, 0x7C, 0x00, 0xF8, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, 0xC0, - 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, - 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF0, - 0x03, 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x03, - 0xF0, 0x07, 0xC0, 0x0F, 0x80, 0x3F, 0x00, 0x7C, 0x00, 0xF8, 0x03, 0xE0, - 0x07, 0xC0, 0x0F, 0x00, 0x3E, 0x00, 0x78, 0x01, 0xF0, 0x03, 0xC0, 0x0F, - 0x80, 0x1E, 0x00, 0x78, 0x00, 0xF0, 0x03, 0xC0, 0x00, 0x00, 0xF8, 0x00, - 0x07, 0xC0, 0x00, 0x3E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x3C, - 0x01, 0xC1, 0xE1, 0xCF, 0xCF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, - 0xFF, 0xF0, 0x07, 0xFC, 0x00, 0x1F, 0xC0, 0x01, 0xFF, 0x00, 0x1F, 0x7C, - 0x00, 0xF9, 0xF0, 0x0F, 0x8F, 0x80, 0xF8, 0x3E, 0x07, 0xC0, 0xF0, 0x1C, - 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0xF8, - 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x03, - 0xE0, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, - 0x0F, 0x80, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, - 0x00, 0x3E, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x03, 0xE0, 0x00, - 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x03, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, - 0xF8, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, - 0x03, 0xE0, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, - 0x00, 0x0F, 0x80, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0xF8, 0x00, - 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x03, 0xE0, - 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0E, 0x0E, 0x0E, 0x1E, - 0x7C, 0xF8, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x78, - 0x00, 0x03, 0xC0, 0x00, 0x1C, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00, 0x00, - 0x78, 0x00, 0x07, 0x80, 0x00, 0x3C, 0x00, 0x01, 0xE0, 0x00, 0x1E, 0x00, - 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x03, 0xC0, 0x00, 0x1E, - 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x00, 0x07, 0x80, 0x00, - 0x3C, 0x00, 0x01, 0xE0, 0x00, 0x0E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x80, - 0x00, 0x3C, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x0F, - 0x00, 0x00, 0x78, 0x00, 0x03, 0xC0, 0x00, 0x3C, 0x00, 0x01, 0xE0, 0x00, - 0x0F, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x3C, 0x00, 0x03, 0xC0, - 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x00, 0x00, 0x78, 0x00, 0x03, - 0xC0, 0x00, 0x1E, 0x00, 0x01, 0xE0, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x00, - 0x07, 0x80, 0x00, 0x3C, 0x00, 0x01, 0xE0, 0x00, 0x1E, 0x00, 0x00, 0xF0, - 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x3F, 0xFF, - 0x80, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x3F, 0xFF, - 0xFF, 0x00, 0x3F, 0xE0, 0xFF, 0x80, 0x3F, 0xC0, 0x1F, 0xE0, 0x3F, 0xC0, - 0x07, 0xF8, 0x1F, 0xC0, 0x01, 0xFC, 0x0F, 0xC0, 0x00, 0x7E, 0x0F, 0xE0, - 0x00, 0x3F, 0x87, 0xE0, 0x00, 0x0F, 0xC3, 0xF0, 0x00, 0x07, 0xE3, 0xF8, - 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x00, 0xFC, 0xFC, 0x00, 0x00, 0x7E, 0x7E, - 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x1F, 0xBF, 0x80, 0x00, 0x0F, 0xFF, - 0xC0, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x01, 0xFF, - 0xF0, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x1F, - 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x03, - 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x00, - 0xFF, 0xFC, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x3F, 0xBF, 0x00, 0x00, - 0x1F, 0xDF, 0x80, 0x00, 0x0F, 0xCF, 0xC0, 0x00, 0x07, 0xE7, 0xE0, 0x00, - 0x03, 0xF3, 0xF8, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x01, 0xFC, 0x7E, 0x00, - 0x00, 0xFC, 0x3F, 0x80, 0x00, 0xFE, 0x1F, 0xC0, 0x00, 0x7F, 0x07, 0xF0, - 0x00, 0x7F, 0x03, 0xF8, 0x00, 0x3F, 0x80, 0xFE, 0x00, 0x3F, 0x80, 0x3F, - 0xC0, 0x7F, 0x80, 0x1F, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0xC0, 0x01, - 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0x80, 0x00, - 0x00, 0x38, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00, 0x7C, 0x00, - 0x3F, 0x00, 0x0F, 0xC0, 0x07, 0xF0, 0x03, 0xFC, 0x01, 0xFF, 0x03, 0xFF, - 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, - 0x01, 0xFC, 0x00, 0x7F, 0x00, 0x1F, 0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00, - 0x7F, 0x00, 0x1F, 0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00, 0x7F, 0x00, 0x1F, - 0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00, 0x7F, 0x00, 0x1F, 0xC0, 0x07, 0xF0, - 0x01, 0xFC, 0x00, 0x7F, 0x00, 0x1F, 0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00, - 0x7F, 0x00, 0x1F, 0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00, 0x7F, 0x00, 0x1F, - 0xC0, 0x07, 0xF0, 0x01, 0xFC, 0x00, 0x7F, 0x00, 0x1F, 0xC0, 0x07, 0xF0, - 0x01, 0xFC, 0x00, 0x7F, 0x00, 0x1F, 0xC0, 0x07, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x0F, 0xFF, - 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0xFC, 0x01, 0xFF, - 0x81, 0xFF, 0x80, 0xFF, 0x80, 0x1F, 0xF0, 0x3F, 0x80, 0x01, 0xFE, 0x1F, - 0xC0, 0x00, 0x3F, 0x87, 0xF0, 0x00, 0x0F, 0xF3, 0xF8, 0x00, 0x01, 0xFC, - 0xFE, 0x00, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0x0F, 0xCF, 0xC0, 0x00, 0x03, - 0xF3, 0xF0, 0x00, 0x00, 0xFC, 0xFC, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, - 0x0F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, - 0x00, 0x7E, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x1F, 0xC0, 0x00, - 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x07, 0xFC, 0x00, - 0x00, 0x07, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0x80, - 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xC0, - 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x7F, 0xC0, - 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x0F, 0xF0, - 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x07, - 0xF0, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, - 0xDF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x3F, - 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xFF, 0xC0, 0x07, - 0xFF, 0xFF, 0xF8, 0x03, 0xFF, 0x03, 0xFF, 0x01, 0xFE, 0x00, 0x3F, 0xE0, - 0x7F, 0x00, 0x03, 0xF8, 0x1F, 0x80, 0x00, 0x7F, 0x0F, 0xE0, 0x00, 0x1F, - 0xC3, 0xF8, 0x00, 0x03, 0xF0, 0xFC, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, - 0x3F, 0x1F, 0xC0, 0x00, 0x0F, 0xC7, 0xF0, 0x00, 0x03, 0xF1, 0xFC, 0x00, - 0x00, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, - 0x00, 0x07, 0xE0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x03, 0xFC, 0x00, - 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x0F, 0xFF, 0x00, - 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0xFF, 0xFE, 0x00, 0x00, 0x3F, 0xFF, - 0xC0, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, - 0x1F, 0xE0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, - 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, 0xFF, 0xF8, - 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x07, 0xF7, - 0xE0, 0x00, 0x01, 0xFD, 0xF8, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x1F, - 0x9F, 0xC0, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x01, - 0xFC, 0x1F, 0xE0, 0x01, 0xFF, 0x07, 0xFE, 0x01, 0xFF, 0x80, 0xFF, 0xFF, - 0xFF, 0xC0, 0x1F, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0xF0, 0x00, 0x3F, - 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, - 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x1F, 0x80, - 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x3F, - 0xC0, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, - 0xFF, 0xE0, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00, - 0x01, 0xFB, 0xF0, 0x00, 0x00, 0x3F, 0x7E, 0x00, 0x00, 0x0F, 0xCF, 0xC0, - 0x00, 0x03, 0xF1, 0xF8, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0x1F, 0x87, - 0xE0, 0x00, 0x07, 0xE0, 0xFC, 0x00, 0x01, 0xF8, 0x1F, 0x80, 0x00, 0x3F, - 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x7E, 0x00, 0x03, 0xF0, 0x0F, 0xC0, 0x00, - 0xFE, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x3F, 0x00, 0x07, 0xE0, 0x07, 0xE0, - 0x01, 0xF8, 0x00, 0xFC, 0x00, 0x7F, 0x00, 0x1F, 0x80, 0x0F, 0xC0, 0x03, - 0xF0, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x1F, 0x80, - 0x01, 0xF8, 0x07, 0xE0, 0x00, 0x3F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x01, - 0xF8, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x00, 0xFC, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x03, 0xF0, 0x00, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x01, 0xF8, - 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0xF0, - 0x1F, 0xFF, 0xFF, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, - 0xC0, 0x7E, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x07, 0xC0, 0x00, - 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x07, - 0xE0, 0xFF, 0x80, 0x01, 0xF9, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xFF, 0xC0, - 0x1F, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xF3, 0xFF, - 0xE0, 0x7F, 0xC0, 0x0F, 0xFC, 0x3F, 0xC0, 0x00, 0xFF, 0x0F, 0xE0, 0x00, - 0x1F, 0xE3, 0xF0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x03, 0xF0, - 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x03, 0xF7, 0xE0, 0x00, 0x01, 0xFD, 0xF8, 0x00, 0x00, - 0x7F, 0x7F, 0x00, 0x00, 0x1F, 0x9F, 0xC0, 0x00, 0x0F, 0xE3, 0xF8, 0x00, - 0x07, 0xF0, 0xFF, 0x00, 0x01, 0xFC, 0x1F, 0xE0, 0x01, 0xFE, 0x07, 0xFE, - 0x01, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0xFF, 0xE0, 0x03, - 0xFF, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xF0, 0x00, - 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x1F, 0xFF, 0xC0, - 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xFF, - 0x80, 0x1F, 0xF0, 0x7F, 0xE0, 0x1F, 0xE0, 0x0F, 0xF0, 0x1F, 0xE0, 0x03, - 0xFC, 0x0F, 0xE0, 0x00, 0xFE, 0x0F, 0xE0, 0x00, 0x3F, 0x87, 0xE0, 0x00, - 0x1F, 0xC7, 0xF0, 0x00, 0x07, 0xE3, 0xF0, 0x00, 0x03, 0xF1, 0xF8, 0x00, - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x1F, 0xC0, - 0xFF, 0xC0, 0x0F, 0xE1, 0xFF, 0xFC, 0x07, 0xF3, 0xFF, 0xFF, 0x03, 0xF3, - 0xFF, 0xFF, 0xC1, 0xFB, 0xFF, 0xFF, 0xF0, 0xFF, 0xFE, 0x0F, 0xFC, 0x7F, - 0xF8, 0x01, 0xFF, 0x3F, 0xF0, 0x00, 0x3F, 0x9F, 0xF0, 0x00, 0x0F, 0xEF, - 0xF8, 0x00, 0x07, 0xF7, 0xF8, 0x00, 0x01, 0xFF, 0xFC, 0x00, 0x00, 0xFF, - 0xFC, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x0F, - 0xFF, 0x80, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x03, 0xF7, 0xE0, 0x00, 0x01, - 0xFB, 0xF0, 0x00, 0x00, 0xFD, 0xF8, 0x00, 0x00, 0x7E, 0x7E, 0x00, 0x00, - 0x7F, 0x3F, 0x00, 0x00, 0x3F, 0x9F, 0xC0, 0x00, 0x3F, 0x87, 0xE0, 0x00, - 0x1F, 0xC3, 0xF8, 0x00, 0x1F, 0xC0, 0xFF, 0x00, 0x3F, 0xE0, 0x7F, 0xE0, - 0x7F, 0xE0, 0x1F, 0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0xE0, 0x01, 0xFF, - 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, - 0x3C, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, - 0x0F, 0xC0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, - 0x00, 0xFC, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x1F, 0x80, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, - 0x7E, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0x03, 0xF0, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x03, 0xF0, 0x00, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0x80, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x07, - 0xF0, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, - 0x00, 0x7F, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xFC, - 0x00, 0x7F, 0xFF, 0xFF, 0x00, 0x7F, 0xE0, 0xFF, 0xC0, 0x7F, 0x80, 0x0F, - 0xF0, 0x3F, 0x80, 0x03, 0xF8, 0x3F, 0x80, 0x00, 0xFE, 0x1F, 0xC0, 0x00, - 0x7F, 0x0F, 0xC0, 0x00, 0x1F, 0x8F, 0xE0, 0x00, 0x0F, 0xE7, 0xF0, 0x00, - 0x07, 0xF3, 0xF8, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x01, 0xFC, 0x7E, 0x00, - 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x7E, 0x1F, 0xC0, 0x00, 0x7F, 0x07, 0xF0, - 0x00, 0x7F, 0x03, 0xFC, 0x00, 0x7F, 0x80, 0xFF, 0x80, 0xFF, 0x80, 0x3F, - 0xFF, 0xFF, 0x80, 0x07, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0x00, 0x03, - 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0xF8, 0x03, 0xFF, 0x07, 0xFE, 0x03, - 0xFC, 0x00, 0x7F, 0x83, 0xFC, 0x00, 0x1F, 0xE3, 0xF8, 0x00, 0x03, 0xF9, - 0xFC, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x3F, - 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x03, - 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, - 0x7F, 0xF8, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, - 0x1F, 0xDF, 0xC0, 0x00, 0x1F, 0xCF, 0xF0, 0x00, 0x1F, 0xE3, 0xFC, 0x00, - 0x1F, 0xE0, 0xFF, 0x80, 0x7F, 0xE0, 0x3F, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, - 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0x0F, - 0xFF, 0x80, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, - 0x7F, 0xFF, 0x80, 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFC, 0x00, - 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xC0, 0xFF, 0xC0, 0x7F, 0x80, 0x1F, 0xE0, - 0x7F, 0x80, 0x07, 0xF8, 0x7F, 0x80, 0x00, 0xFC, 0x3F, 0x80, 0x00, 0x7F, - 0x1F, 0x80, 0x00, 0x1F, 0x9F, 0xC0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x03, - 0xF7, 0xE0, 0x00, 0x01, 0xFB, 0xF0, 0x00, 0x00, 0xFD, 0xF8, 0x00, 0x00, - 0x7E, 0xFC, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, - 0x0F, 0xFF, 0x80, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xF0, 0x00, - 0x03, 0xFD, 0xFC, 0x00, 0x01, 0xFE, 0xFE, 0x00, 0x01, 0xFF, 0x7F, 0x80, - 0x01, 0xFF, 0x9F, 0xE0, 0x01, 0xFF, 0xC7, 0xFC, 0x03, 0xFF, 0xE3, 0xFF, - 0xFF, 0xFB, 0xF0, 0xFF, 0xFF, 0xF9, 0xF8, 0x3F, 0xFF, 0xF8, 0xFC, 0x07, - 0xFF, 0xF8, 0xFE, 0x00, 0xFF, 0xF0, 0x7F, 0x00, 0x03, 0x00, 0x3F, 0x80, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x07, 0xE0, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x03, 0xF9, 0xF8, 0x00, 0x01, 0xF8, - 0xFC, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0x00, 0xFE, 0x3F, 0x80, 0x00, 0x7E, - 0x0F, 0xE0, 0x00, 0x7F, 0x07, 0xF0, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x7F, - 0x80, 0xFF, 0x80, 0xFF, 0x80, 0x3F, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFF, - 0x80, 0x03, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x1F, 0xFE, - 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE1, - 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0xE7, 0xDF, 0x3C, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, - 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0xC0, - 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0xFF, 0xF8, - 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x3F, 0xFC, - 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x1F, 0xFF, - 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, - 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xF8, - 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, - 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x1F, 0xFF, 0x00, - 0x00, 0x00, 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x1F, - 0xF8, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, - 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0x00, 0xFF, 0x80, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x07, 0xFF, 0xC0, - 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x3F, - 0xFE, 0x00, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, - 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0xFF, 0xF8, - 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x07, - 0xF0, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x0F, - 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x1F, - 0xFF, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x3F, - 0xFE, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x3F, - 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, - 0xF8, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFE, - 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFE, - 0x07, 0xFC, 0x07, 0xFE, 0x1F, 0xE0, 0x03, 0xFE, 0x3F, 0x80, 0x01, 0xFC, - 0x7E, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x03, 0xFB, 0xF0, 0x00, 0x07, 0xF7, - 0xE0, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x0F, 0xDF, 0x80, 0x00, 0x1F, 0xFF, - 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x03, 0xF0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x3F, 0xC0, 0x00, - 0x00, 0xFF, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, - 0x3F, 0xC0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x0F, - 0xF0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x01, 0xF8, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0x1F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, - 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xFF, - 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x0F, 0xFF, 0xC0, - 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x07, 0xFE, - 0x00, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x00, 0x3F, - 0xF0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x00, - 0x0F, 0xF8, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x1F, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x0F, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x07, 0xF8, 0x03, 0xF8, 0x00, 0x01, 0xFC, 0x00, 0x00, 0xFE, 0x01, - 0xFC, 0x00, 0x03, 0xFF, 0xC1, 0xF8, 0x3F, 0xC0, 0x7E, 0x00, 0x03, 0xFF, - 0xF8, 0x7E, 0x07, 0xF0, 0x3F, 0x80, 0x01, 0xFF, 0xFF, 0x1F, 0x00, 0xFC, - 0x0F, 0xC0, 0x00, 0xFF, 0xDF, 0xEF, 0xC0, 0x3F, 0x87, 0xE0, 0x00, 0x7F, - 0x80, 0xFB, 0xF0, 0x0F, 0xE1, 0xF8, 0x00, 0x3F, 0x80, 0x1F, 0xF8, 0x01, - 0xF8, 0xFC, 0x00, 0x1F, 0xC0, 0x03, 0xFE, 0x00, 0x7E, 0x3F, 0x00, 0x0F, - 0xE0, 0x00, 0x7F, 0x80, 0x1F, 0x8F, 0xC0, 0x03, 0xF0, 0x00, 0x1F, 0xE0, - 0x07, 0xE7, 0xE0, 0x01, 0xFC, 0x00, 0x07, 0xF0, 0x01, 0xFD, 0xF8, 0x00, - 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x7F, 0x7E, 0x00, 0x3F, 0x80, 0x00, 0x7F, - 0x00, 0x1F, 0x9F, 0x80, 0x0F, 0xC0, 0x00, 0x1F, 0x80, 0x07, 0xE7, 0xE0, - 0x07, 0xF0, 0x00, 0x07, 0xE0, 0x01, 0xF9, 0xF8, 0x01, 0xFC, 0x00, 0x01, - 0xF8, 0x00, 0x7E, 0xFC, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x00, 0x1F, 0xBF, - 0x00, 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x0F, 0xEF, 0xC0, 0x07, 0xE0, 0x00, - 0x0F, 0xC0, 0x03, 0xF3, 0xF8, 0x01, 0xF8, 0x00, 0x07, 0xE0, 0x00, 0xFC, - 0xFE, 0x00, 0x7E, 0x00, 0x01, 0xF8, 0x00, 0x7E, 0x1F, 0x80, 0x1F, 0x80, - 0x00, 0xFE, 0x00, 0x1F, 0x87, 0xE0, 0x07, 0xF0, 0x00, 0x3F, 0x00, 0x0F, - 0xC1, 0xF8, 0x01, 0xFC, 0x00, 0x1F, 0xC0, 0x07, 0xF0, 0x7E, 0x00, 0x7F, - 0x00, 0x0F, 0xF0, 0x03, 0xF8, 0x1F, 0xC0, 0x0F, 0xE0, 0x03, 0xFC, 0x01, - 0xFC, 0x03, 0xF0, 0x03, 0xFC, 0x01, 0xFF, 0x00, 0xFF, 0x00, 0xFE, 0x00, - 0x7F, 0xC1, 0xFF, 0xF0, 0xFF, 0x80, 0x3F, 0x80, 0x0F, 0xFF, 0xF9, 0xFF, - 0xFF, 0xC0, 0x07, 0xF0, 0x01, 0xFF, 0xFC, 0x7F, 0xFF, 0xC0, 0x01, 0xFC, - 0x00, 0x3F, 0xFE, 0x0F, 0xFF, 0xE0, 0x00, 0x3F, 0x80, 0x07, 0xFE, 0x01, - 0xFF, 0xE0, 0x00, 0x0F, 0xF0, 0x00, 0x18, 0x00, 0x1F, 0xC0, 0x00, 0x01, - 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0F, 0xFF, - 0x80, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xC7, 0xFF, 0xC0, - 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x01, - 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, - 0x00, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x00, - 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x00, - 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0xFD, 0xFC, 0x00, 0x00, 0x00, 0x0F, - 0xE7, 0xE0, 0x00, 0x00, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0x00, 0x03, 0xF1, - 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x87, 0xE0, 0x00, 0x00, 0x01, 0xFC, 0x3F, - 0x80, 0x00, 0x00, 0x0F, 0xC1, 0xFC, 0x00, 0x00, 0x00, 0xFE, 0x07, 0xF0, - 0x00, 0x00, 0x07, 0xF0, 0x3F, 0x80, 0x00, 0x00, 0x7F, 0x01, 0xFC, 0x00, - 0x00, 0x03, 0xF8, 0x07, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x3F, 0x80, 0x00, - 0x01, 0xFC, 0x01, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x07, 0xF0, 0x00, 0x00, - 0x7E, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x01, 0xFC, 0x00, 0x00, 0x3F, - 0x80, 0x07, 0xF0, 0x00, 0x01, 0xF8, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0xC0, - 0x01, 0xFC, 0x00, 0x00, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xE0, 0x00, - 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x07, - 0xF0, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0xFF, 0xFE, - 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, - 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF0, 0x03, - 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x00, 0x01, 0xFE, 0x00, 0xFE, - 0x00, 0x00, 0x07, 0xF0, 0x0F, 0xE0, 0x00, 0x00, 0x3F, 0x80, 0x7F, 0x00, - 0x00, 0x01, 0xFE, 0x03, 0xF8, 0x00, 0x00, 0x07, 0xF0, 0x3F, 0x80, 0x00, - 0x00, 0x3F, 0x81, 0xFC, 0x00, 0x00, 0x01, 0xFE, 0x0F, 0xE0, 0x00, 0x00, - 0x07, 0xF0, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0x87, 0xF0, 0x00, 0x00, 0x01, - 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x00, 0x00, 0x3F, - 0x9F, 0xC0, 0x00, 0x00, 0x01, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x07, 0xF0, - 0xFF, 0xFF, 0xFF, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFF, - 0xFF, 0xC0, 0x3F, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x83, - 0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0xC0, 0x00, 0x1F, 0xFC, 0x3F, 0x00, 0x00, - 0x0F, 0xF8, 0xFC, 0x00, 0x00, 0x1F, 0xE3, 0xF0, 0x00, 0x00, 0x3F, 0x8F, - 0xC0, 0x00, 0x00, 0x7F, 0x3F, 0x00, 0x00, 0x01, 0xFC, 0xFC, 0x00, 0x00, - 0x07, 0xF3, 0xF0, 0x00, 0x00, 0x1F, 0xCF, 0xC0, 0x00, 0x00, 0x7F, 0x3F, - 0x00, 0x00, 0x01, 0xFC, 0xFC, 0x00, 0x00, 0x07, 0xF3, 0xF0, 0x00, 0x00, - 0x1F, 0x8F, 0xC0, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0x03, 0xF8, 0xFC, - 0x00, 0x00, 0x1F, 0xC3, 0xF0, 0x00, 0x01, 0xFE, 0x0F, 0xC0, 0x00, 0xFF, - 0xF0, 0x3F, 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xF8, 0x03, 0xFF, - 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0xFF, - 0xF0, 0xFC, 0x00, 0x00, 0xFF, 0xE3, 0xF0, 0x00, 0x00, 0x7F, 0xCF, 0xC0, - 0x00, 0x00, 0x7F, 0xBF, 0x00, 0x00, 0x00, 0xFE, 0xFC, 0x00, 0x00, 0x03, - 0xFF, 0xF0, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x1F, 0xFF, 0x00, - 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x03, - 0xFF, 0xC0, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x00, - 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x3F, - 0xBF, 0x00, 0x00, 0x01, 0xFE, 0xFC, 0x00, 0x00, 0x0F, 0xFB, 0xF0, 0x00, - 0x00, 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xFF, 0xF0, - 0xFF, 0xFF, 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, - 0xFF, 0xC0, 0x3F, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x01, 0xC0, 0x00, - 0x00, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF0, 0x00, - 0x00, 0x1F, 0xFF, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0x80, 0x00, - 0x3F, 0xFF, 0xFF, 0xFE, 0x00, 0x03, 0xFF, 0xC0, 0x7F, 0xF8, 0x00, 0x3F, - 0xF0, 0x00, 0x7F, 0xE0, 0x03, 0xFE, 0x00, 0x00, 0xFF, 0x80, 0x3F, 0xE0, - 0x00, 0x03, 0xFC, 0x01, 0xFE, 0x00, 0x00, 0x0F, 0xF0, 0x1F, 0xE0, 0x00, - 0x00, 0x3F, 0x80, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0xE0, 0x00, 0x00, - 0x07, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x3F, 0x87, 0xF0, 0x00, 0x00, 0x00, - 0xFE, 0x3F, 0x80, 0x00, 0x00, 0x07, 0xF1, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xF0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, - 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0xFE, - 0xFE, 0x00, 0x00, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x00, 0x00, 0x3F, 0x9F, - 0x80, 0x00, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xC7, 0xF0, - 0x00, 0x00, 0x00, 0xFE, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0xFE, 0x00, - 0x00, 0x00, 0x7F, 0x03, 0xF8, 0x00, 0x00, 0x03, 0xF8, 0x1F, 0xE0, 0x00, - 0x00, 0x3F, 0xC0, 0x7F, 0x80, 0x00, 0x03, 0xFC, 0x03, 0xFE, 0x00, 0x00, - 0x3F, 0xE0, 0x0F, 0xF8, 0x00, 0x03, 0xFE, 0x00, 0x3F, 0xF0, 0x00, 0x7F, - 0xE0, 0x00, 0xFF, 0xF0, 0x1F, 0xFF, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xF0, - 0x00, 0x0F, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xE0, 0x00, - 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0x00, - 0x00, 0x0F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x7F, 0xFF, - 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, - 0xE0, 0x0F, 0xFF, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0x03, - 0xF8, 0x00, 0x07, 0xFF, 0x81, 0xFC, 0x00, 0x00, 0x7F, 0xE0, 0xFE, 0x00, - 0x00, 0x0F, 0xF8, 0x7F, 0x00, 0x00, 0x03, 0xFC, 0x3F, 0x80, 0x00, 0x00, - 0xFF, 0x1F, 0xC0, 0x00, 0x00, 0x3F, 0x8F, 0xE0, 0x00, 0x00, 0x0F, 0xE7, - 0xF0, 0x00, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x00, 0x01, 0xFD, 0xFC, 0x00, - 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, - 0x1F, 0xBF, 0x80, 0x00, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x00, 0x07, 0xFF, - 0xE0, 0x00, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, - 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x00, - 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, - 0xC0, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, - 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, - 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xFF, - 0x80, 0x00, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x00, 0x07, 0xEF, 0xE0, 0x00, - 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x00, 0x03, - 0xF9, 0xFC, 0x00, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x00, 0x01, 0xFE, 0x7F, - 0x00, 0x00, 0x01, 0xFE, 0x3F, 0x80, 0x00, 0x01, 0xFF, 0x1F, 0xC0, 0x00, - 0x01, 0xFF, 0x0F, 0xE0, 0x00, 0x01, 0xFF, 0x07, 0xF0, 0x00, 0x07, 0xFF, - 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, - 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xFF, - 0xFE, 0x00, 0x1F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, - 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, - 0xCF, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x03, - 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, - 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, - 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xFF, 0xF8, 0xFE, 0x00, 0x00, - 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x3F, - 0x80, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, - 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x03, 0xF8, - 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, - 0x00, 0xFE, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xF0, 0x00, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x03, 0xF8, - 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, - 0x00, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xF8, - 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, - 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0x8F, 0xE0, 0x00, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, - 0x00, 0x3F, 0x80, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x7F, - 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0xFF, - 0xFF, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x7F, 0xFF, - 0xFF, 0xE0, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xFF, - 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0x03, 0xFF, 0xF0, 0x00, 0xFF, 0xE0, 0x00, - 0x7F, 0xE0, 0x03, 0xFF, 0x00, 0x00, 0x3F, 0xE0, 0x07, 0xF8, 0x00, 0x00, - 0x3F, 0xE0, 0x1F, 0xE0, 0x00, 0x00, 0x3F, 0xC0, 0x7F, 0x80, 0x00, 0x00, - 0x3F, 0xC0, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0x83, 0xFC, 0x00, 0x00, 0x00, - 0x3F, 0x87, 0xF0, 0x00, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x00, 0x00, - 0xFE, 0x3F, 0x80, 0x00, 0x00, 0x00, 0xFE, 0x7E, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xF8, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x01, 0xFF, 0xFF, 0xFF, - 0xE0, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xFF, 0xFF, - 0x80, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE, - 0x00, 0x00, 0x00, 0x00, 0x3E, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFC, - 0x00, 0x00, 0x00, 0x01, 0xFB, 0xF8, 0x00, 0x00, 0x00, 0x03, 0xF7, 0xF0, - 0x00, 0x00, 0x00, 0x07, 0xEF, 0xF0, 0x00, 0x00, 0x00, 0x0F, 0xCF, 0xE0, - 0x00, 0x00, 0x00, 0x1F, 0x9F, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0x1F, 0xC0, - 0x00, 0x00, 0x00, 0xFE, 0x3F, 0xC0, 0x00, 0x00, 0x03, 0xFC, 0x7F, 0x80, - 0x00, 0x00, 0x07, 0xF8, 0x7F, 0x80, 0x00, 0x00, 0x1F, 0xF0, 0x7F, 0x80, - 0x00, 0x00, 0x7F, 0xE0, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0xC0, 0xFF, 0xC0, - 0x00, 0x0F, 0xEF, 0x80, 0xFF, 0xE0, 0x00, 0x7F, 0x9F, 0x00, 0xFF, 0xFC, - 0x07, 0xFE, 0x3E, 0x00, 0xFF, 0xFF, 0xFF, 0xF8, 0x7C, 0x00, 0xFF, 0xFF, - 0xFF, 0xE0, 0xF8, 0x00, 0x7F, 0xFF, 0xFF, 0x00, 0xF0, 0x00, 0x3F, 0xFF, - 0xFC, 0x01, 0xE0, 0x00, 0x1F, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xF0, - 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, - 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, - 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, - 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, - 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, - 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, - 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, - 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, - 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, - 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, - 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, - 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, - 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, - 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, - 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, - 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, - 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, - 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, - 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, - 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x01, - 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x03, 0xF0, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x07, 0xE0, 0x00, - 0x00, 0x3F, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0x7E, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, - 0x1F, 0x80, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x1F, 0xFF, - 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x7F, 0xFE, 0x00, - 0x03, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0xFE, 0xFE, 0x00, 0x07, - 0xF7, 0xF0, 0x00, 0x7F, 0x3F, 0xC0, 0x03, 0xF8, 0xFF, 0x00, 0x3F, 0xC7, - 0xFC, 0x07, 0xFC, 0x1F, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFE, 0x01, 0xFF, - 0xFF, 0xC0, 0x07, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x03, 0xC0, - 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0x7E, 0x00, 0x00, 0x00, 0xFF, 0x3F, - 0x00, 0x00, 0x00, 0xFF, 0x1F, 0x80, 0x00, 0x00, 0xFF, 0x0F, 0xC0, 0x00, - 0x00, 0xFF, 0x07, 0xE0, 0x00, 0x00, 0xFF, 0x03, 0xF0, 0x00, 0x00, 0xFF, - 0x01, 0xF8, 0x00, 0x00, 0xFF, 0x00, 0xFC, 0x00, 0x00, 0xFF, 0x00, 0x7E, - 0x00, 0x00, 0xFF, 0x00, 0x3F, 0x00, 0x00, 0xFF, 0x00, 0x1F, 0x80, 0x00, - 0xFF, 0x00, 0x0F, 0xC0, 0x00, 0xFF, 0x00, 0x07, 0xE0, 0x00, 0xFF, 0x00, - 0x03, 0xF0, 0x00, 0xFF, 0x00, 0x01, 0xF8, 0x00, 0xFF, 0x00, 0x00, 0xFC, - 0x00, 0xFF, 0x00, 0x00, 0x7E, 0x00, 0xFF, 0x00, 0x00, 0x3F, 0x00, 0xFF, - 0x00, 0x00, 0x1F, 0x80, 0xFF, 0x00, 0x00, 0x0F, 0xC0, 0xFF, 0x00, 0x00, - 0x07, 0xE0, 0xFF, 0x80, 0x00, 0x03, 0xF0, 0xFF, 0xC0, 0x00, 0x01, 0xF8, - 0xFF, 0xF0, 0x00, 0x00, 0xFC, 0xFF, 0xFC, 0x00, 0x00, 0x7E, 0xFF, 0xFE, - 0x00, 0x00, 0x3F, 0xFF, 0x7F, 0x80, 0x00, 0x1F, 0xFF, 0x1F, 0xE0, 0x00, - 0x0F, 0xFF, 0x07, 0xF0, 0x00, 0x07, 0xFF, 0x03, 0xFC, 0x00, 0x03, 0xFF, - 0x00, 0xFF, 0x00, 0x01, 0xFF, 0x00, 0x3F, 0x80, 0x00, 0xFF, 0x00, 0x0F, - 0xE0, 0x00, 0x7F, 0x00, 0x07, 0xF8, 0x00, 0x3F, 0x00, 0x01, 0xFE, 0x00, - 0x1F, 0x80, 0x00, 0x7F, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0xC0, 0x07, 0xE0, - 0x00, 0x0F, 0xF0, 0x03, 0xF0, 0x00, 0x03, 0xF8, 0x01, 0xF8, 0x00, 0x01, - 0xFE, 0x00, 0xFC, 0x00, 0x00, 0x7F, 0x80, 0x7E, 0x00, 0x00, 0x1F, 0xC0, - 0x3F, 0x00, 0x00, 0x0F, 0xF0, 0x1F, 0x80, 0x00, 0x03, 0xFC, 0x0F, 0xC0, - 0x00, 0x00, 0xFF, 0x07, 0xE0, 0x00, 0x00, 0x7F, 0x83, 0xF0, 0x00, 0x00, - 0x1F, 0xE1, 0xF8, 0x00, 0x00, 0x07, 0xF8, 0xFC, 0x00, 0x00, 0x01, 0xFC, - 0x7E, 0x00, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x3F, 0xDF, 0x80, - 0x00, 0x00, 0x0F, 0xE0, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, - 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x00, - 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFE, 0x00, 0x00, - 0x00, 0x3F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xC0, 0x00, - 0x00, 0x0F, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x00, - 0x00, 0x07, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xEF, 0xFF, 0xFE, 0x00, - 0x00, 0x03, 0xF7, 0xFF, 0xDF, 0x00, 0x00, 0x01, 0xFB, 0xFF, 0xEF, 0xC0, - 0x00, 0x00, 0xF9, 0xFF, 0xF7, 0xE0, 0x00, 0x00, 0xFC, 0xFF, 0xF9, 0xF0, - 0x00, 0x00, 0x7E, 0x7F, 0xFC, 0xFC, 0x00, 0x00, 0x3E, 0x3F, 0xFE, 0x7E, - 0x00, 0x00, 0x3F, 0x1F, 0xFF, 0x1F, 0x00, 0x00, 0x1F, 0x8F, 0xFF, 0x8F, - 0xC0, 0x00, 0x0F, 0x87, 0xFF, 0xC7, 0xE0, 0x00, 0x0F, 0xC3, 0xFF, 0xE1, - 0xF0, 0x00, 0x07, 0xE1, 0xFF, 0xF0, 0xFC, 0x00, 0x03, 0xE0, 0xFF, 0xF8, - 0x7E, 0x00, 0x03, 0xF0, 0x7F, 0xFC, 0x1F, 0x00, 0x01, 0xF8, 0x3F, 0xFE, - 0x0F, 0xC0, 0x00, 0xF8, 0x1F, 0xFF, 0x07, 0xE0, 0x00, 0xFC, 0x0F, 0xFF, - 0x81, 0xF0, 0x00, 0x7E, 0x07, 0xFF, 0xC0, 0xFC, 0x00, 0x3E, 0x03, 0xFF, - 0xE0, 0x7E, 0x00, 0x3F, 0x01, 0xFF, 0xF0, 0x1F, 0x00, 0x1F, 0x80, 0xFF, - 0xF8, 0x0F, 0xC0, 0x0F, 0x80, 0x7F, 0xFC, 0x07, 0xE0, 0x0F, 0xC0, 0x3F, - 0xFE, 0x01, 0xF0, 0x07, 0xE0, 0x1F, 0xFF, 0x00, 0xFC, 0x03, 0xE0, 0x0F, - 0xFF, 0x80, 0x7E, 0x03, 0xF0, 0x07, 0xFF, 0xC0, 0x1F, 0x01, 0xF8, 0x03, - 0xFF, 0xE0, 0x0F, 0xC0, 0xF8, 0x01, 0xFF, 0xF0, 0x07, 0xE0, 0xFC, 0x00, - 0xFF, 0xF8, 0x01, 0xF0, 0x7E, 0x00, 0x7F, 0xFC, 0x00, 0xFC, 0x3E, 0x00, - 0x3F, 0xFE, 0x00, 0x7E, 0x3F, 0x00, 0x1F, 0xFF, 0x00, 0x1F, 0x9F, 0x80, - 0x0F, 0xFF, 0x80, 0x0F, 0xCF, 0x80, 0x07, 0xFF, 0xC0, 0x07, 0xEF, 0xC0, - 0x03, 0xFF, 0xE0, 0x01, 0xFF, 0xE0, 0x01, 0xFF, 0xF0, 0x00, 0xFF, 0xE0, - 0x00, 0xFF, 0xF8, 0x00, 0x7F, 0xF0, 0x00, 0x7F, 0xFC, 0x00, 0x1F, 0xF8, - 0x00, 0x3F, 0xFE, 0x00, 0x0F, 0xF8, 0x00, 0x1F, 0xFF, 0x00, 0x07, 0xFC, - 0x00, 0x0F, 0xFF, 0x80, 0x01, 0xFE, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0xFE, - 0x00, 0x03, 0xF0, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, - 0x0F, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xFF, - 0xFC, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xC0, - 0x00, 0x00, 0x7F, 0xFF, 0xE0, 0x00, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x00, - 0x1F, 0xFF, 0xFC, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x00, 0x07, 0xFF, - 0xDF, 0xC0, 0x00, 0x03, 0xFF, 0xEF, 0xE0, 0x00, 0x01, 0xFF, 0xF3, 0xF8, - 0x00, 0x00, 0xFF, 0xF9, 0xFE, 0x00, 0x00, 0x7F, 0xFC, 0x7F, 0x00, 0x00, - 0x3F, 0xFE, 0x1F, 0xC0, 0x00, 0x1F, 0xFF, 0x0F, 0xF0, 0x00, 0x0F, 0xFF, - 0x83, 0xF8, 0x00, 0x07, 0xFF, 0xC0, 0xFE, 0x00, 0x03, 0xFF, 0xE0, 0x7F, - 0x80, 0x01, 0xFF, 0xF0, 0x1F, 0xC0, 0x00, 0xFF, 0xF8, 0x07, 0xF0, 0x00, - 0x7F, 0xFC, 0x03, 0xF8, 0x00, 0x3F, 0xFE, 0x00, 0xFE, 0x00, 0x1F, 0xFF, - 0x00, 0x3F, 0x80, 0x0F, 0xFF, 0x80, 0x1F, 0xC0, 0x07, 0xFF, 0xC0, 0x07, - 0xF0, 0x03, 0xFF, 0xE0, 0x03, 0xFC, 0x01, 0xFF, 0xF0, 0x00, 0xFE, 0x00, - 0xFF, 0xF8, 0x00, 0x3F, 0x80, 0x7F, 0xFC, 0x00, 0x1F, 0xE0, 0x3F, 0xFE, - 0x00, 0x07, 0xF0, 0x1F, 0xFF, 0x00, 0x01, 0xFC, 0x0F, 0xFF, 0x80, 0x00, - 0xFE, 0x07, 0xFF, 0xC0, 0x00, 0x3F, 0x83, 0xFF, 0xE0, 0x00, 0x0F, 0xE1, - 0xFF, 0xF0, 0x00, 0x07, 0xF0, 0xFF, 0xF8, 0x00, 0x01, 0xFC, 0x7F, 0xFC, - 0x00, 0x00, 0xFF, 0x3F, 0xFE, 0x00, 0x00, 0x3F, 0x9F, 0xFF, 0x00, 0x00, - 0x0F, 0xEF, 0xFF, 0x80, 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x00, 0x01, 0xFF, - 0xFF, 0xE0, 0x00, 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xFF, 0xF8, - 0x00, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x00, - 0x01, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0x00, 0x3F, - 0xFF, 0xC0, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFE, 0x00, - 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFE, - 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0xC0, 0xFF, - 0xF8, 0x00, 0x07, 0xFF, 0x00, 0x03, 0xFF, 0x00, 0x03, 0xFF, 0x00, 0x00, - 0x3F, 0xE0, 0x01, 0xFF, 0x00, 0x00, 0x07, 0xFC, 0x00, 0xFF, 0x80, 0x00, - 0x00, 0xFF, 0x80, 0x3F, 0xC0, 0x00, 0x00, 0x1F, 0xE0, 0x1F, 0xE0, 0x00, - 0x00, 0x03, 0xFC, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x7F, 0x83, 0xFC, 0x00, - 0x00, 0x00, 0x0F, 0xE0, 0xFE, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x7F, 0x00, - 0x00, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x1F, 0xC7, 0xF0, - 0x00, 0x00, 0x00, 0x03, 0xF1, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x00, 0x00, 0x0F, 0xEF, - 0xE0, 0x00, 0x00, 0x00, 0x01, 0xFB, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x7E, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xBF, 0x80, 0x00, 0x00, - 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xF9, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x9F, 0xC0, 0x00, - 0x00, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x00, 0x00, 0x07, 0xF0, 0xFE, 0x00, - 0x00, 0x00, 0x03, 0xFC, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0xFE, 0x07, 0xF0, - 0x00, 0x00, 0x00, 0x7F, 0x81, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x3F, - 0xC0, 0x00, 0x00, 0x0F, 0xF0, 0x0F, 0xF8, 0x00, 0x00, 0x07, 0xF8, 0x01, - 0xFF, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x3F, 0xF0, 0x00, 0x03, 0xFE, 0x00, - 0x07, 0xFF, 0x00, 0x03, 0xFF, 0x00, 0x00, 0xFF, 0xF8, 0x0F, 0xFF, 0x80, - 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xE0, - 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xF0, - 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, - 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xFF, 0xE0, 0x0F, - 0xFF, 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, - 0xFF, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0xE0, 0x00, 0x0F, 0xFF, 0x3F, - 0x80, 0x00, 0x07, 0xFC, 0xFE, 0x00, 0x00, 0x0F, 0xFB, 0xF8, 0x00, 0x00, - 0x1F, 0xEF, 0xE0, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x00, 0xFE, 0xFE, - 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, - 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x01, 0xFF, 0xF8, - 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x3F, 0xFF, 0x80, 0x00, 0x00, - 0xFE, 0xFE, 0x00, 0x00, 0x07, 0xFB, 0xF8, 0x00, 0x00, 0x1F, 0xEF, 0xE0, - 0x00, 0x01, 0xFF, 0x3F, 0x80, 0x00, 0x1F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, - 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, - 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xFF, 0xC0, - 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x03, - 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x0F, - 0xE0, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x3F, - 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x3F, - 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x0F, - 0xFF, 0xC0, 0xFF, 0xF8, 0x00, 0x07, 0xFF, 0x00, 0x03, 0xFF, 0x00, 0x03, - 0xFF, 0x00, 0x00, 0x3F, 0xE0, 0x01, 0xFF, 0x00, 0x00, 0x07, 0xFC, 0x00, - 0xFF, 0x80, 0x00, 0x00, 0xFF, 0x80, 0x3F, 0xC0, 0x00, 0x00, 0x1F, 0xF0, - 0x1F, 0xE0, 0x00, 0x00, 0x03, 0xFC, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x7F, - 0x83, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0xFE, 0x00, 0x00, 0x00, 0x03, - 0xFC, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x00, 0x00, - 0x1F, 0xC7, 0xF0, 0x00, 0x00, 0x00, 0x03, 0xF9, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x00, - 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x00, 0x00, 0x01, 0xFB, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0x7E, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x7E, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xBF, - 0x80, 0x00, 0x00, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xF9, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0x9F, 0xC0, 0x00, 0x00, 0x00, 0x1F, 0xC7, 0xF0, 0x00, 0x00, 0x00, 0x07, - 0xF0, 0xFE, 0x00, 0x00, 0x0C, 0x03, 0xF8, 0x3F, 0xC0, 0x00, 0x07, 0xC0, - 0xFE, 0x07, 0xF0, 0x00, 0x01, 0xF8, 0x7F, 0x81, 0xFE, 0x00, 0x00, 0xFF, - 0x3F, 0xC0, 0x3F, 0xC0, 0x00, 0x1F, 0xEF, 0xE0, 0x0F, 0xF8, 0x00, 0x03, - 0xFF, 0xF8, 0x01, 0xFF, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x3F, 0xE0, 0x00, - 0x07, 0xFE, 0x00, 0x07, 0xFE, 0x00, 0x03, 0xFF, 0x00, 0x00, 0xFF, 0xF8, - 0x1F, 0xFF, 0xE0, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x03, 0xFF, - 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFF, 0xE7, 0xF8, 0x00, 0x03, - 0xFF, 0xFF, 0xE0, 0xFF, 0x00, 0x00, 0x1F, 0xFF, 0xE0, 0x1F, 0xE0, 0x00, - 0x00, 0x1E, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, - 0xFF, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xFF, - 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC3, 0xF0, 0x00, 0x00, 0xFF, 0xE1, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0xFC, - 0x00, 0x00, 0x03, 0xFC, 0x7E, 0x00, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00, - 0x00, 0x3F, 0x9F, 0x80, 0x00, 0x00, 0x1F, 0xCF, 0xC0, 0x00, 0x00, 0x0F, - 0xE7, 0xE0, 0x00, 0x00, 0x07, 0xF3, 0xF0, 0x00, 0x00, 0x03, 0xF9, 0xF8, - 0x00, 0x00, 0x01, 0xFC, 0xFC, 0x00, 0x00, 0x00, 0xFE, 0x7E, 0x00, 0x00, - 0x00, 0x7F, 0x3F, 0x00, 0x00, 0x00, 0x3F, 0x9F, 0x80, 0x00, 0x00, 0x3F, - 0x8F, 0xC0, 0x00, 0x00, 0x1F, 0xC7, 0xE0, 0x00, 0x00, 0x1F, 0xC3, 0xF0, - 0x00, 0x00, 0x1F, 0xC1, 0xF8, 0x00, 0x00, 0x7F, 0xE0, 0xFF, 0xFF, 0xFF, - 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, 0xFF, 0xFF, 0x80, - 0x1F, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0xFC, 0x07, 0xFF, - 0xFF, 0xFF, 0xFF, 0x83, 0xF0, 0x00, 0x00, 0x3F, 0xC1, 0xF8, 0x00, 0x00, - 0x0F, 0xF0, 0xFC, 0x00, 0x00, 0x03, 0xF8, 0x7E, 0x00, 0x00, 0x00, 0xFE, - 0x3F, 0x00, 0x00, 0x00, 0x7F, 0x1F, 0x80, 0x00, 0x00, 0x3F, 0x8F, 0xC0, - 0x00, 0x00, 0x0F, 0xC7, 0xE0, 0x00, 0x00, 0x07, 0xE3, 0xF0, 0x00, 0x00, - 0x03, 0xF1, 0xF8, 0x00, 0x00, 0x01, 0xF8, 0xFC, 0x00, 0x00, 0x00, 0xFC, - 0x7E, 0x00, 0x00, 0x00, 0x7E, 0x3F, 0x00, 0x00, 0x00, 0x3F, 0x1F, 0x80, - 0x00, 0x00, 0x1F, 0x8F, 0xC0, 0x00, 0x00, 0x0F, 0xC7, 0xE0, 0x00, 0x00, - 0x07, 0xE3, 0xF0, 0x00, 0x00, 0x03, 0xF9, 0xF8, 0x00, 0x00, 0x01, 0xFC, - 0xFC, 0x00, 0x00, 0x00, 0xFE, 0x7E, 0x00, 0x00, 0x00, 0x7F, 0xBF, 0x00, - 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x1C, - 0x00, 0x00, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0x80, - 0x00, 0x1F, 0xFF, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xFF, 0xFC, 0x00, 0x1F, - 0xFF, 0xFF, 0xFF, 0x00, 0x1F, 0xFC, 0x01, 0xFF, 0xC0, 0x1F, 0xF0, 0x00, - 0x1F, 0xF0, 0x0F, 0xF0, 0x00, 0x07, 0xF8, 0x0F, 0xF0, 0x00, 0x00, 0xFE, - 0x07, 0xF0, 0x00, 0x00, 0x7F, 0x07, 0xF0, 0x00, 0x00, 0x1F, 0xC3, 0xF8, - 0x00, 0x00, 0x0F, 0xE1, 0xFC, 0x00, 0x00, 0x03, 0xF0, 0xFE, 0x00, 0x00, - 0x01, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x80, 0x00, 0x00, 0x00, - 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x07, 0xFC, - 0x00, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, - 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x00, - 0x03, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x1F, - 0xFF, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x1F, 0xFF, - 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x07, 0xFF, 0xF0, - 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, - 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, - 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x00, 0x01, 0xFD, - 0xF8, 0x00, 0x00, 0x00, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x7E, 0x00, - 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x00, - 0x0F, 0xE7, 0xF0, 0x00, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x00, 0x07, 0xF1, - 0xFE, 0x00, 0x00, 0x07, 0xF8, 0x7F, 0xC0, 0x00, 0x07, 0xF8, 0x1F, 0xF0, - 0x00, 0x0F, 0xF8, 0x0F, 0xFF, 0x80, 0x7F, 0xFC, 0x03, 0xFF, 0xFF, 0xFF, - 0xFC, 0x00, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0xFF, 0xF8, 0x00, - 0x03, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x00, 0x00, - 0x78, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x01, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x03, - 0xF0, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, - 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, - 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0x80, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, - 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, - 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, - 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, - 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, - 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, - 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, - 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, - 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, - 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, - 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, - 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, - 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, - 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, - 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, - 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, - 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, - 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x7E, 0x7F, 0x00, 0x00, 0x00, 0xFE, - 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0x80, 0x00, 0x01, 0xFC, 0x3F, 0xC0, - 0x00, 0x03, 0xFC, 0x3F, 0xE0, 0x00, 0x07, 0xF8, 0x1F, 0xF8, 0x00, 0x1F, - 0xF8, 0x0F, 0xFF, 0x00, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xFF, 0xE0, 0x03, - 0xFF, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, - 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x00, 0x00, 0xFE, 0x7F, - 0x00, 0x00, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0x00, 0x00, 0xFE, 0x3F, 0x80, - 0x00, 0x00, 0x1F, 0xC3, 0xF8, 0x00, 0x00, 0x01, 0xFC, 0x3F, 0x80, 0x00, - 0x00, 0x1F, 0xC1, 0xFC, 0x00, 0x00, 0x03, 0xF8, 0x1F, 0xC0, 0x00, 0x00, - 0x3F, 0x81, 0xFC, 0x00, 0x00, 0x03, 0xF8, 0x0F, 0xE0, 0x00, 0x00, 0x7F, - 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x07, 0xE0, 0x00, 0x00, 0x7F, 0x00, - 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x07, 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x3F, - 0x80, 0x00, 0x0F, 0xE0, 0x03, 0xF8, 0x00, 0x01, 0xFC, 0x00, 0x3F, 0x80, - 0x00, 0x1F, 0xC0, 0x01, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x1F, 0xC0, 0x00, - 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x0F, 0xE0, 0x00, 0x3F, - 0x00, 0x00, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x00, - 0x00, 0x7F, 0x00, 0x07, 0xE0, 0x00, 0x07, 0xF0, 0x00, 0xFE, 0x00, 0x00, - 0x3F, 0x00, 0x0F, 0xE0, 0x00, 0x03, 0xF8, 0x00, 0xFC, 0x00, 0x00, 0x3F, - 0x80, 0x1F, 0xC0, 0x00, 0x01, 0xF8, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xC0, - 0x1F, 0x80, 0x00, 0x01, 0xFC, 0x01, 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x3F, - 0x80, 0x00, 0x00, 0xFE, 0x03, 0xF0, 0x00, 0x00, 0x0F, 0xE0, 0x3F, 0x00, - 0x00, 0x00, 0x7E, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x7E, 0x00, 0x00, - 0x00, 0x3F, 0x07, 0xE0, 0x00, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x00, 0x00, - 0x3F, 0x8F, 0xC0, 0x00, 0x00, 0x01, 0xF8, 0xFC, 0x00, 0x00, 0x00, 0x1F, - 0xDF, 0x80, 0x00, 0x00, 0x01, 0xFD, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xDF, - 0x80, 0x00, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x00, - 0x00, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x00, - 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x0F, 0xF0, 0x00, - 0x00, 0xFF, 0xFE, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0xFE, 0xFF, 0x00, - 0x00, 0x1F, 0xF0, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0x1F, 0xF0, 0x00, - 0x00, 0xFE, 0x7F, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x01, 0xFE, 0x7F, 0x00, - 0x00, 0x3F, 0xF8, 0x00, 0x01, 0xFC, 0x7F, 0x80, 0x00, 0x3F, 0xF8, 0x00, - 0x01, 0xFC, 0x3F, 0x80, 0x00, 0x3F, 0xFC, 0x00, 0x01, 0xFC, 0x3F, 0x80, - 0x00, 0x3F, 0xFC, 0x00, 0x03, 0xFC, 0x3F, 0x80, 0x00, 0x7E, 0xFC, 0x00, - 0x03, 0xF8, 0x3F, 0xC0, 0x00, 0x7E, 0xFC, 0x00, 0x03, 0xF8, 0x1F, 0xC0, - 0x00, 0x7E, 0x7E, 0x00, 0x03, 0xF8, 0x1F, 0xC0, 0x00, 0x7E, 0x7E, 0x00, - 0x03, 0xF8, 0x1F, 0xC0, 0x00, 0xFC, 0x7E, 0x00, 0x07, 0xF0, 0x1F, 0xC0, - 0x00, 0xFC, 0x7F, 0x00, 0x07, 0xF0, 0x0F, 0xE0, 0x00, 0xFC, 0x3F, 0x00, - 0x07, 0xF0, 0x0F, 0xE0, 0x01, 0xF8, 0x3F, 0x00, 0x07, 0xF0, 0x0F, 0xE0, - 0x01, 0xF8, 0x3F, 0x00, 0x0F, 0xE0, 0x07, 0xE0, 0x01, 0xF8, 0x3F, 0x80, - 0x0F, 0xE0, 0x07, 0xF0, 0x01, 0xF8, 0x1F, 0x80, 0x0F, 0xE0, 0x07, 0xF0, - 0x03, 0xF0, 0x1F, 0x80, 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF0, 0x1F, 0xC0, - 0x0F, 0xC0, 0x03, 0xF0, 0x03, 0xF0, 0x0F, 0xC0, 0x1F, 0xC0, 0x03, 0xF8, - 0x03, 0xF0, 0x0F, 0xC0, 0x1F, 0xC0, 0x03, 0xF8, 0x07, 0xE0, 0x0F, 0xC0, - 0x1F, 0xC0, 0x03, 0xF8, 0x07, 0xE0, 0x0F, 0xE0, 0x1F, 0x80, 0x01, 0xF8, - 0x07, 0xE0, 0x07, 0xE0, 0x3F, 0x80, 0x01, 0xF8, 0x0F, 0xC0, 0x07, 0xE0, - 0x3F, 0x80, 0x01, 0xFC, 0x0F, 0xC0, 0x07, 0xE0, 0x3F, 0x80, 0x01, 0xFC, - 0x0F, 0xC0, 0x03, 0xF0, 0x3F, 0x00, 0x00, 0xFC, 0x0F, 0xC0, 0x03, 0xF0, - 0x7F, 0x00, 0x00, 0xFC, 0x1F, 0x80, 0x03, 0xF0, 0x7F, 0x00, 0x00, 0xFE, - 0x1F, 0x80, 0x03, 0xF8, 0x7F, 0x00, 0x00, 0xFE, 0x1F, 0x80, 0x01, 0xF8, - 0x7E, 0x00, 0x00, 0x7E, 0x1F, 0x80, 0x01, 0xF8, 0x7E, 0x00, 0x00, 0x7E, - 0x3F, 0x00, 0x01, 0xF8, 0xFE, 0x00, 0x00, 0x7F, 0x3F, 0x00, 0x00, 0xFC, - 0xFE, 0x00, 0x00, 0x7F, 0x3F, 0x00, 0x00, 0xFC, 0xFC, 0x00, 0x00, 0x3F, - 0x7E, 0x00, 0x00, 0xFC, 0xFC, 0x00, 0x00, 0x3F, 0x7E, 0x00, 0x00, 0xFF, - 0xFC, 0x00, 0x00, 0x3F, 0x7E, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x3F, - 0xFE, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x7F, - 0xF8, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x1F, - 0xFC, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x3F, - 0xF0, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x0F, - 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, - 0xE0, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x07, - 0xF0, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x1F, 0xE3, - 0xFC, 0x00, 0x00, 0x03, 0xFC, 0x3F, 0xC0, 0x00, 0x00, 0x3F, 0xC1, 0xFE, - 0x00, 0x00, 0x07, 0xF8, 0x0F, 0xF0, 0x00, 0x00, 0x7F, 0x00, 0xFF, 0x00, - 0x00, 0x0F, 0xF0, 0x07, 0xF8, 0x00, 0x01, 0xFE, 0x00, 0x3F, 0x80, 0x00, - 0x1F, 0xC0, 0x03, 0xFC, 0x00, 0x03, 0xFC, 0x00, 0x1F, 0xE0, 0x00, 0x7F, - 0x80, 0x00, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xF0, 0x00, 0xFE, 0x00, - 0x00, 0x7F, 0x80, 0x1F, 0xE0, 0x00, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0x00, - 0x3F, 0xC0, 0x3F, 0x80, 0x00, 0x01, 0xFE, 0x07, 0xF8, 0x00, 0x00, 0x0F, - 0xE0, 0x7F, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0xE0, 0x00, 0x00, 0x07, 0xF9, - 0xFE, 0x00, 0x00, 0x00, 0x3F, 0x9F, 0xC0, 0x00, 0x00, 0x03, 0xFF, 0xF8, - 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0xFF, 0xF0, 0x00, - 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, - 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, - 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x1F, - 0xFF, 0x80, 0x00, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0xBF, - 0xC0, 0x00, 0x00, 0x07, 0xF1, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0xE0, - 0x00, 0x00, 0x0F, 0xE0, 0xFF, 0x00, 0x00, 0x01, 0xFC, 0x07, 0xF8, 0x00, - 0x00, 0x3F, 0xC0, 0x3F, 0x80, 0x00, 0x03, 0xF8, 0x03, 0xFC, 0x00, 0x00, - 0x7F, 0x00, 0x1F, 0xE0, 0x00, 0x0F, 0xF0, 0x00, 0xFE, 0x00, 0x01, 0xFE, - 0x00, 0x0F, 0xF0, 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0x80, 0x03, 0xFC, 0x00, - 0x03, 0xFC, 0x00, 0x7F, 0x80, 0x00, 0x3F, 0xC0, 0x07, 0xF8, 0x00, 0x01, - 0xFE, 0x00, 0xFF, 0x00, 0x00, 0x0F, 0xF0, 0x1F, 0xE0, 0x00, 0x00, 0xFF, - 0x01, 0xFE, 0x00, 0x00, 0x07, 0xF8, 0x3F, 0xC0, 0x00, 0x00, 0x3F, 0xC7, - 0xF8, 0x00, 0x00, 0x03, 0xFC, 0x7F, 0x80, 0x00, 0x00, 0x1F, 0xEF, 0xF0, - 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x03, 0xFD, 0xFE, 0x00, - 0x00, 0x00, 0x1F, 0xE7, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0x8F, 0xF0, 0x00, - 0x00, 0x03, 0xFC, 0x1F, 0xE0, 0x00, 0x00, 0x0F, 0xE0, 0x7F, 0x80, 0x00, - 0x00, 0x7F, 0x80, 0xFF, 0x00, 0x00, 0x03, 0xFC, 0x01, 0xFC, 0x00, 0x00, - 0x0F, 0xE0, 0x07, 0xF8, 0x00, 0x00, 0x7F, 0x80, 0x0F, 0xF0, 0x00, 0x01, - 0xFC, 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x7F, 0x80, 0x00, 0x7F, - 0x80, 0x00, 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xFC, 0x00, 0x0F, 0xF0, - 0x00, 0x07, 0xF8, 0x00, 0x3F, 0x80, 0x00, 0x0F, 0xE0, 0x01, 0xFE, 0x00, - 0x00, 0x3F, 0xC0, 0x07, 0xF0, 0x00, 0x00, 0x7F, 0x00, 0x3F, 0x80, 0x00, - 0x00, 0xFE, 0x01, 0xFE, 0x00, 0x00, 0x03, 0xFC, 0x07, 0xF0, 0x00, 0x00, - 0x07, 0xF0, 0x3F, 0x80, 0x00, 0x00, 0x1F, 0xE0, 0xFE, 0x00, 0x00, 0x00, - 0x3F, 0x87, 0xF0, 0x00, 0x00, 0x00, 0x7F, 0x3F, 0xC0, 0x00, 0x00, 0x01, - 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x07, - 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x01, 0xFE, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xF0, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, - 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, - 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, - 0x7F, 0x80, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x00, - 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, - 0xFF, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, - 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x01, - 0xFE, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x1F, 0xF0, 0x00, - 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x03, - 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, - 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x07, - 0xFC, 0x00, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, - 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x0F, - 0xF8, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, - 0x00, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x1F, - 0xF0, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, - 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x1F, - 0xE0, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, - 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x00, 0x3F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFC, 0x03, 0xE0, 0x1F, 0x00, 0xF8, 0x07, 0xC0, 0x3E, 0x01, 0xF0, - 0x0F, 0x80, 0x7C, 0x03, 0xE0, 0x1F, 0x00, 0xF8, 0x07, 0xC0, 0x3E, 0x01, - 0xF0, 0x0F, 0x80, 0x7C, 0x03, 0xE0, 0x1F, 0x00, 0xF8, 0x07, 0xC0, 0x3E, - 0x01, 0xF0, 0x0F, 0x80, 0x7C, 0x03, 0xE0, 0x1F, 0x00, 0xF8, 0x07, 0xC0, - 0x3E, 0x01, 0xF0, 0x0F, 0x80, 0x7C, 0x03, 0xE0, 0x1F, 0x00, 0xF8, 0x07, - 0xC0, 0x3E, 0x01, 0xF0, 0x0F, 0x80, 0x7C, 0x03, 0xE0, 0x1F, 0x00, 0xF8, - 0x07, 0xC0, 0x3E, 0x01, 0xF0, 0x0F, 0x80, 0x7C, 0x03, 0xE0, 0x1F, 0x00, - 0xF8, 0x07, 0xC0, 0x3E, 0x01, 0xF0, 0x0F, 0x80, 0x7C, 0x03, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x70, 0x00, 0x03, 0xC0, 0x00, 0x1E, - 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, - 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x1E, - 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, - 0x03, 0x80, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x03, 0x80, 0x00, 0x1E, - 0x00, 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, - 0x07, 0x80, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x1E, - 0x00, 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x1E, 0x00, 0x00, 0xF0, 0x00, - 0x07, 0x80, 0x00, 0x1C, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x1C, - 0x00, 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x3C, 0x00, 0x00, 0xF0, 0x00, - 0x07, 0x80, 0x00, 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x3C, - 0x00, 0x00, 0xF0, 0x00, 0x07, 0x80, 0x00, 0x3C, 0x00, 0x00, 0xF0, 0x00, - 0x07, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xFC, - 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, 0x7E, 0x03, 0xF0, 0x1F, 0x80, - 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, 0x7E, 0x03, 0xF0, 0x1F, - 0x80, 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, 0x7E, 0x03, 0xF0, - 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, 0x7E, 0x03, - 0xF0, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, 0x7E, - 0x03, 0xF0, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, - 0x7E, 0x03, 0xF0, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, - 0xC0, 0x7E, 0x03, 0xF0, 0x1F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFE, 0x00, 0x1F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x07, 0xFC, 0x00, 0x00, 0xFF, 0xC0, 0x00, - 0x3E, 0xF8, 0x00, 0x07, 0xDF, 0x00, 0x01, 0xF1, 0xF0, 0x00, 0x3E, 0x3E, - 0x00, 0x07, 0xC3, 0xE0, 0x01, 0xF0, 0x7C, 0x00, 0x3E, 0x07, 0x80, 0x0F, - 0x80, 0xF8, 0x01, 0xF0, 0x1F, 0x00, 0x3E, 0x01, 0xF0, 0x0F, 0x80, 0x3E, - 0x01, 0xF0, 0x03, 0xC0, 0x7C, 0x00, 0x7C, 0x0F, 0x80, 0x0F, 0x81, 0xF0, - 0x00, 0xF8, 0x7C, 0x00, 0x1F, 0x0F, 0x80, 0x01, 0xE3, 0xE0, 0x00, 0x3E, - 0x7C, 0x00, 0x07, 0xCF, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x0F, 0x80, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0x01, 0xFC, 0x03, 0xF8, 0x07, 0xF0, 0x0F, - 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7C, 0x00, 0xF8, 0x01, 0xE0, 0x03, 0xC0, - 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFF, - 0x80, 0x03, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x3F, 0xF8, - 0x3F, 0xF8, 0x07, 0xF8, 0x00, 0xFF, 0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x3F, - 0x80, 0x00, 0xFC, 0x07, 0xE0, 0x00, 0x1F, 0xC0, 0xFC, 0x00, 0x01, 0xF8, - 0x1F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, - 0x3F, 0xFE, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0xF8, 0x03, - 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xC7, 0xE0, 0x7F, 0xFE, 0x00, 0xFC, - 0x1F, 0xF8, 0x00, 0x1F, 0x83, 0xFC, 0x00, 0x03, 0xF0, 0x7F, 0x00, 0x00, - 0x7E, 0x1F, 0xC0, 0x00, 0x0F, 0xC3, 0xF0, 0x00, 0x01, 0xF8, 0x7E, 0x00, - 0x00, 0x7F, 0x0F, 0xC0, 0x00, 0x0F, 0xE1, 0xF8, 0x00, 0x01, 0xFC, 0x3F, - 0x00, 0x00, 0x7F, 0x87, 0xF0, 0x00, 0x1F, 0xF0, 0x7F, 0x00, 0x07, 0xFE, - 0x0F, 0xF0, 0x03, 0xFF, 0xC1, 0xFF, 0xFF, 0xFD, 0xFC, 0x1F, 0xFF, 0xFF, - 0x3F, 0xF1, 0xFF, 0xFF, 0xC7, 0xFE, 0x1F, 0xFF, 0xE0, 0x7F, 0xC0, 0xFF, - 0xF0, 0x07, 0xF8, 0x01, 0xE0, 0x00, 0x1C, 0xFC, 0x00, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x01, - 0xF8, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x03, 0xF0, 0x3F, 0xF0, 0x01, 0xF8, 0x7F, 0xFF, - 0x00, 0xFC, 0x7F, 0xFF, 0xC0, 0x7E, 0x7F, 0xFF, 0xF0, 0x3F, 0x7F, 0xFF, - 0xFC, 0x1F, 0xFF, 0x87, 0xFF, 0x0F, 0xFE, 0x00, 0x7F, 0xC7, 0xFE, 0x00, - 0x1F, 0xF3, 0xFE, 0x00, 0x07, 0xF9, 0xFE, 0x00, 0x01, 0xFC, 0xFF, 0x00, - 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x0F, 0xDF, 0xC0, - 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0xFF, 0xF0, - 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x1F, 0xFE, - 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x03, 0xFF, - 0xC0, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0xFF, - 0xF8, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x3F, 0x7F, 0x00, 0x00, 0x3F, - 0xBF, 0xC0, 0x00, 0x1F, 0xDF, 0xE0, 0x00, 0x1F, 0xCF, 0xF8, 0x00, 0x0F, - 0xE7, 0xFE, 0x00, 0x0F, 0xE3, 0xFF, 0x80, 0x1F, 0xF1, 0xFF, 0xF0, 0x1F, - 0xF0, 0xFB, 0xFF, 0xFF, 0xF0, 0x7C, 0xFF, 0xFF, 0xF0, 0x3E, 0x3F, 0xFF, - 0xF0, 0x1F, 0x0F, 0xFF, 0xF0, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0xFF, - 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0xF0, 0x07, 0xFC, - 0x1F, 0xF8, 0x0F, 0xF0, 0x03, 0xFC, 0x1F, 0xE0, 0x01, 0xFC, 0x1F, 0xC0, - 0x00, 0xFC, 0x3F, 0x80, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0x7E, 0x7F, 0x00, - 0x00, 0x7E, 0x7E, 0x00, 0x00, 0x7E, 0x7E, 0x00, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x3F, 0x7E, 0x00, - 0x00, 0x3F, 0x7F, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x7E, 0x3F, 0x80, - 0x00, 0x7E, 0x3F, 0x80, 0x00, 0xFE, 0x1F, 0xC0, 0x01, 0xFC, 0x1F, 0xE0, - 0x03, 0xFC, 0x0F, 0xF8, 0x0F, 0xF8, 0x07, 0xFF, 0xFF, 0xF8, 0x03, 0xFF, - 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0x80, 0x00, 0x3F, - 0xFE, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x03, 0xF0, 0x00, - 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x0F, 0xC0, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x01, 0xF8, - 0x00, 0x00, 0x00, 0xFC, 0x00, 0x7F, 0xE0, 0x7E, 0x01, 0xFF, 0xFC, 0x3F, - 0x01, 0xFF, 0xFF, 0x9F, 0x81, 0xFF, 0xFF, 0xEF, 0xC1, 0xFF, 0xFF, 0xFF, - 0xE1, 0xFF, 0xC3, 0xFF, 0xF1, 0xFF, 0x00, 0x7F, 0xF8, 0xFF, 0x00, 0x0F, - 0xFC, 0xFF, 0x00, 0x03, 0xFE, 0x7F, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x00, - 0x7F, 0xBF, 0x80, 0x00, 0x1F, 0xDF, 0x80, 0x00, 0x0F, 0xFF, 0xC0, 0x00, - 0x07, 0xFF, 0xE0, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, 0xFF, 0xF0, 0x00, - 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x1F, 0xFE, 0x00, - 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0xC0, - 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x7F, 0xFC, - 0x00, 0x00, 0x3F, 0x7E, 0x00, 0x00, 0x3F, 0xBF, 0x00, 0x00, 0x1F, 0xDF, - 0xC0, 0x00, 0x1F, 0xEF, 0xF0, 0x00, 0x0F, 0xF3, 0xF8, 0x00, 0x0F, 0xF9, - 0xFE, 0x00, 0x0F, 0xFC, 0x7F, 0x80, 0x0F, 0xFE, 0x1F, 0xF0, 0x1F, 0xFF, - 0x0F, 0xFF, 0xFF, 0xEF, 0x83, 0xFF, 0xFF, 0xE7, 0xC0, 0xFF, 0xFF, 0xE3, - 0xE0, 0x1F, 0xFF, 0xE1, 0xF0, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x1C, 0x00, - 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, - 0xF0, 0x00, 0x7F, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x7F, 0xE0, - 0xFF, 0xE0, 0x7F, 0xC0, 0x0F, 0xF0, 0x3F, 0x80, 0x03, 0xFC, 0x3F, 0x80, - 0x00, 0xFE, 0x1F, 0x80, 0x00, 0x3F, 0x9F, 0xC0, 0x00, 0x0F, 0xCF, 0xC0, - 0x00, 0x07, 0xE7, 0xE0, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0xFF, 0xF0, - 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x1F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x01, - 0xF8, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, - 0x1F, 0x80, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x07, 0xE7, 0xE0, 0x00, 0x03, - 0xF3, 0xF8, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x01, 0xFC, 0x7F, 0x80, 0x01, - 0xFC, 0x1F, 0xE0, 0x01, 0xFE, 0x07, 0xFC, 0x03, 0xFE, 0x01, 0xFF, 0xFF, - 0xFE, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x07, 0xFF, - 0xFE, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x1F, - 0x80, 0x3F, 0xC0, 0x7F, 0xE0, 0x3F, 0xF0, 0x3F, 0xF8, 0x1F, 0xC0, 0x1F, - 0xC0, 0x0F, 0xC0, 0x07, 0xE0, 0x03, 0xF0, 0x01, 0xF8, 0x00, 0xFC, 0x00, - 0x7E, 0x00, 0x3F, 0x00, 0x1F, 0x81, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x7E, 0x00, 0x3F, 0x00, 0x1F, 0x80, 0x0F, - 0xC0, 0x07, 0xE0, 0x03, 0xF0, 0x01, 0xF8, 0x00, 0xFC, 0x00, 0x7E, 0x00, - 0x3F, 0x00, 0x1F, 0x80, 0x0F, 0xC0, 0x07, 0xE0, 0x03, 0xF0, 0x01, 0xF8, - 0x00, 0xFC, 0x00, 0x7E, 0x00, 0x3F, 0x00, 0x1F, 0x80, 0x0F, 0xC0, 0x07, - 0xE0, 0x03, 0xF0, 0x01, 0xF8, 0x00, 0xFC, 0x00, 0x7E, 0x00, 0x3F, 0x00, - 0x1F, 0x80, 0x0F, 0xC0, 0x07, 0xE0, 0x03, 0xF0, 0x01, 0xF8, 0x00, 0xFC, - 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xFE, 0x0F, 0xC0, 0x7F, 0xFF, - 0xC7, 0xE0, 0x7F, 0xFF, 0xF3, 0xF0, 0x7F, 0xFF, 0xFD, 0xF8, 0x7F, 0xE0, - 0xFF, 0xFC, 0x3F, 0xC0, 0x1F, 0xFE, 0x3F, 0x80, 0x03, 0xFF, 0x3F, 0x80, - 0x00, 0xFF, 0x9F, 0xC0, 0x00, 0x7F, 0xCF, 0xC0, 0x00, 0x1F, 0xEF, 0xE0, - 0x00, 0x0F, 0xF7, 0xE0, 0x00, 0x03, 0xFB, 0xF0, 0x00, 0x01, 0xFD, 0xF8, - 0x00, 0x00, 0xFF, 0xFC, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x3F, 0xFE, - 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x03, 0xFF, - 0xC0, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x7F, - 0xF8, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x3F, 0xBF, 0x00, 0x00, 0x1F, - 0xDF, 0x80, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0x0F, 0xF7, 0xF0, 0x00, 0x07, - 0xF9, 0xF8, 0x00, 0x03, 0xFC, 0xFE, 0x00, 0x03, 0xFE, 0x3F, 0x80, 0x03, - 0xFF, 0x1F, 0xE0, 0x03, 0xFF, 0x87, 0xFC, 0x07, 0xEF, 0xC1, 0xFF, 0xFF, - 0xF7, 0xE0, 0x7F, 0xFF, 0xF3, 0xF0, 0x1F, 0xFF, 0xF1, 0xF8, 0x07, 0xFF, - 0xE0, 0xF8, 0x00, 0xFF, 0xE0, 0xFC, 0x00, 0x07, 0x00, 0x7E, 0x00, 0x00, - 0x00, 0x3F, 0x00, 0x00, 0x00, 0x1F, 0x9F, 0x80, 0x00, 0x0F, 0xCF, 0xE0, - 0x00, 0x0F, 0xC3, 0xF0, 0x00, 0x07, 0xE1, 0xFC, 0x00, 0x07, 0xF0, 0xFE, - 0x00, 0x07, 0xF0, 0x3F, 0xC0, 0x07, 0xF8, 0x0F, 0xFF, 0x7F, 0xF8, 0x07, - 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xF8, 0x00, - 0x07, 0xFF, 0xE0, 0x00, 0xFC, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x03, 0xF0, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x03, 0xF0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x3F, 0x00, 0x00, - 0x00, 0xFC, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x0F, 0xC0, 0x7F, 0xE0, - 0x3F, 0x0F, 0xFF, 0xE0, 0xFC, 0x7F, 0xFF, 0xC3, 0xF3, 0xFF, 0xFF, 0x8F, - 0xDF, 0xFF, 0xFF, 0x3F, 0xFE, 0x07, 0xFE, 0xFF, 0xE0, 0x07, 0xFB, 0xFE, - 0x00, 0x0F, 0xEF, 0xF8, 0x00, 0x1F, 0xBF, 0xC0, 0x00, 0x7E, 0xFE, 0x00, - 0x01, 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0x00, 0x00, - 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x0F, - 0xFF, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x03, 0xFF, - 0xC0, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, - 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x3F, 0xFC, 0x00, - 0x00, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0x00, 0x00, - 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x0F, - 0xFF, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x03, 0xFF, - 0xC0, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xF0, - 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x03, 0xF0, - 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, - 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, - 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, - 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, - 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, 0x3F, 0x03, 0xF0, - 0x3F, 0x03, 0xF0, 0x3F, 0x07, 0xF0, 0x7F, 0xFF, 0xEF, 0xFE, 0xFF, 0xCF, - 0xF8, 0xFF, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x00, 0xFC, 0x00, 0x07, 0xF8, 0xFC, 0x00, 0x0F, 0xF0, 0xFC, - 0x00, 0x1F, 0xE0, 0xFC, 0x00, 0x3F, 0xC0, 0xFC, 0x00, 0x7F, 0x80, 0xFC, - 0x00, 0xFF, 0x00, 0xFC, 0x01, 0xFE, 0x00, 0xFC, 0x03, 0xFC, 0x00, 0xFC, - 0x07, 0xF8, 0x00, 0xFC, 0x0F, 0xF0, 0x00, 0xFC, 0x1F, 0xE0, 0x00, 0xFC, - 0x3F, 0xC0, 0x00, 0xFC, 0x7F, 0x80, 0x00, 0xFC, 0xFF, 0x80, 0x00, 0xFD, - 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0xFF, - 0xEF, 0xE0, 0x00, 0xFF, 0xC7, 0xF0, 0x00, 0xFF, 0x87, 0xF8, 0x00, 0xFF, - 0x03, 0xF8, 0x00, 0xFE, 0x01, 0xFC, 0x00, 0xFC, 0x01, 0xFE, 0x00, 0xFC, - 0x00, 0xFE, 0x00, 0xFC, 0x00, 0x7F, 0x00, 0xFC, 0x00, 0x7F, 0x00, 0xFC, - 0x00, 0x3F, 0x80, 0xFC, 0x00, 0x3F, 0xC0, 0xFC, 0x00, 0x1F, 0xC0, 0xFC, - 0x00, 0x0F, 0xE0, 0xFC, 0x00, 0x0F, 0xF0, 0xFC, 0x00, 0x07, 0xF0, 0xFC, - 0x00, 0x03, 0xF8, 0xFC, 0x00, 0x03, 0xF8, 0xFC, 0x00, 0x01, 0xFC, 0xFC, - 0x00, 0x01, 0xFE, 0xFC, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x0F, - 0xF8, 0x00, 0x7F, 0xE0, 0x7C, 0x1F, 0xFF, 0x00, 0xFF, 0xFC, 0x3E, 0x1F, - 0xFF, 0xE0, 0xFF, 0xFF, 0x1F, 0x1F, 0xFF, 0xF8, 0xFF, 0xFF, 0xCF, 0x9F, - 0xFF, 0xFC, 0xFF, 0xFF, 0xF7, 0xDF, 0x81, 0xFF, 0xFC, 0x0F, 0xFB, 0xFF, - 0x00, 0x7F, 0xF8, 0x01, 0xFF, 0xFF, 0x00, 0x1F, 0xF8, 0x00, 0x7F, 0xFF, - 0x00, 0x07, 0xF8, 0x00, 0x3F, 0xFF, 0x00, 0x03, 0xFC, 0x00, 0x0F, 0xFF, - 0x80, 0x01, 0xFC, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x7E, 0x00, 0x03, 0xFF, - 0xC0, 0x00, 0x3F, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x1F, 0x80, 0x00, 0xFF, - 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x7F, 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x3F, - 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0xFE, 0x00, 0x01, 0xF8, 0x00, 0x0F, - 0xFF, 0x00, 0x00, 0xFC, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x7E, 0x00, 0x03, - 0xFF, 0xC0, 0x00, 0x3F, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x1F, 0x80, 0x00, - 0xFF, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x7F, 0xF8, 0x00, 0x07, 0xE0, 0x00, - 0x3F, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0xFE, 0x00, 0x01, 0xF8, 0x00, - 0x0F, 0xFF, 0x00, 0x00, 0xFC, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x7E, 0x00, - 0x03, 0xFF, 0xC0, 0x00, 0x3F, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x1F, 0x80, - 0x00, 0xFF, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x7F, 0xF8, 0x00, 0x07, 0xE0, - 0x00, 0x3F, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0xFE, 0x00, 0x01, 0xF8, - 0x00, 0x0F, 0xFF, 0x00, 0x00, 0xFC, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x7E, - 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x3F, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x1F, - 0x80, 0x00, 0xFC, 0x00, 0x07, 0xFE, 0x03, 0xE0, 0x7F, 0xFE, 0x0F, 0x87, - 0xFF, 0xFC, 0x3E, 0x3F, 0xFF, 0xF8, 0xF9, 0xFF, 0xFF, 0xF3, 0xEF, 0xE0, - 0x7F, 0xEF, 0xBE, 0x00, 0x7F, 0xBF, 0xE0, 0x00, 0xFE, 0xFF, 0x80, 0x01, - 0xFB, 0xFC, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x3F, - 0xFE, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, - 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xC0, - 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, - 0x03, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, - 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x3F, - 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, - 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xC0, - 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, - 0x03, 0xF0, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0x7F, - 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, - 0xE0, 0xFF, 0xC0, 0x7F, 0x80, 0x1F, 0xF0, 0x7F, 0x80, 0x03, 0xF8, 0x3F, - 0x80, 0x00, 0xFE, 0x3F, 0x80, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x1F, 0xCF, - 0xC0, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x03, 0xF7, 0xE0, 0x00, 0x01, 0xFF, - 0xF0, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x1F, - 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x03, - 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, - 0x7F, 0xF8, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, - 0x1F, 0xFF, 0x80, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0x07, 0xE7, 0xE0, 0x00, - 0x07, 0xF3, 0xF8, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x03, 0xF8, 0x7F, 0x80, - 0x03, 0xFC, 0x1F, 0xE0, 0x03, 0xFC, 0x0F, 0xFC, 0x07, 0xFC, 0x03, 0xFF, - 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x07, - 0xFF, 0xFC, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, - 0x0F, 0xFC, 0x00, 0x7C, 0x1F, 0xFF, 0x80, 0x3E, 0x1F, 0xFF, 0xF0, 0x1F, - 0x1F, 0xFF, 0xFC, 0x0F, 0x9F, 0xFF, 0xFF, 0x07, 0xDF, 0xE1, 0xFF, 0xC3, - 0xFF, 0xC0, 0x1F, 0xF1, 0xFF, 0x80, 0x07, 0xF8, 0xFF, 0x80, 0x01, 0xFE, - 0x7F, 0x80, 0x00, 0x7F, 0x3F, 0xC0, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x0F, - 0xEF, 0xE0, 0x00, 0x03, 0xF7, 0xF0, 0x00, 0x01, 0xFB, 0xF0, 0x00, 0x00, - 0xFF, 0xF8, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, - 0x0F, 0xFF, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0xC0, 0x00, - 0x01, 0xFF, 0xE0, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x7F, 0xF8, 0x00, - 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x1F, 0xFF, 0x80, - 0x00, 0x0F, 0xDF, 0xC0, 0x00, 0x07, 0xEF, 0xF0, 0x00, 0x07, 0xF7, 0xF8, - 0x00, 0x07, 0xFB, 0xFE, 0x00, 0x03, 0xF9, 0xFF, 0x80, 0x03, 0xFC, 0xFF, - 0xE0, 0x03, 0xFC, 0x7F, 0xFC, 0x07, 0xFC, 0x3F, 0xFF, 0xFF, 0xFE, 0x1F, - 0xBF, 0xFF, 0xFE, 0x0F, 0xCF, 0xFF, 0xFE, 0x07, 0xE1, 0xFF, 0xFC, 0x03, - 0xF0, 0x7F, 0xF8, 0x01, 0xF8, 0x01, 0xC0, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0x7E, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, - 0x0F, 0xC0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, - 0x00, 0x3F, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x0F, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0x07, 0xC0, 0x7F, - 0xFF, 0xE3, 0xE0, 0x7F, 0xFF, 0xF9, 0xF0, 0x7F, 0xFF, 0xFE, 0xF8, 0x7F, - 0xF0, 0xFF, 0xFC, 0x7F, 0xC0, 0x0F, 0xFE, 0x3F, 0xC0, 0x03, 0xFF, 0x3F, - 0xC0, 0x00, 0xFF, 0x9F, 0xC0, 0x00, 0x3F, 0xDF, 0xC0, 0x00, 0x1F, 0xEF, - 0xE0, 0x00, 0x07, 0xF7, 0xE0, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x01, 0xFF, - 0xF8, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x1F, - 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x03, - 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, - 0x7F, 0xF8, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, - 0x0F, 0xFF, 0x80, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0x07, 0xF7, 0xF0, 0x00, - 0x07, 0xFB, 0xFC, 0x00, 0x03, 0xFC, 0xFE, 0x00, 0x03, 0xFE, 0x7F, 0x80, - 0x03, 0xFF, 0x1F, 0xE0, 0x03, 0xFF, 0x8F, 0xFC, 0x07, 0xFF, 0xC3, 0xFF, - 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFB, 0xF0, 0x3F, 0xFF, 0xF9, 0xF8, 0x07, - 0xFF, 0xF8, 0xFC, 0x00, 0xFF, 0xF0, 0x7E, 0x00, 0x07, 0x00, 0x3F, 0x00, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x07, 0xE0, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x1F, - 0x80, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x03, - 0xF0, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xFE, 0x0F, 0xFF, 0x87, 0xFF, - 0xE3, 0xFF, 0xF9, 0xFF, 0xFE, 0x7F, 0xFF, 0xBF, 0xC3, 0xFF, 0x80, 0xFF, - 0x80, 0x3F, 0xC0, 0x0F, 0xE0, 0x03, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0x00, - 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, - 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, - 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, - 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, - 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x03, - 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFE, 0x00, 0xFF, - 0xFF, 0xFE, 0x03, 0xFF, 0x07, 0xFE, 0x0F, 0xF0, 0x01, 0xFC, 0x1F, 0xC0, - 0x01, 0xFC, 0x3F, 0x00, 0x03, 0xF8, 0xFE, 0x00, 0x03, 0xF1, 0xFC, 0x00, - 0x07, 0xE3, 0xF8, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, - 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x1F, 0xFF, 0x00, - 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0xFE, - 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x01, 0xFF, 0xFE, 0x00, 0x00, 0x3F, 0xFE, - 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x03, 0xF8, - 0x00, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x07, 0xF7, 0xE0, 0x00, 0x0F, 0xEF, - 0xC0, 0x00, 0x1F, 0x9F, 0xC0, 0x00, 0x3F, 0x3F, 0x80, 0x00, 0xFE, 0x7F, - 0x80, 0x03, 0xFC, 0x7F, 0xC0, 0x1F, 0xF0, 0x7F, 0xFF, 0xFF, 0xC0, 0xFF, - 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0x3F, - 0xFF, 0x80, 0x00, 0x03, 0xE0, 0x00, 0x07, 0xE0, 0x03, 0xF0, 0x01, 0xF8, - 0x00, 0xFC, 0x00, 0x7E, 0x00, 0x3F, 0x00, 0x1F, 0x80, 0x0F, 0xC0, 0x07, - 0xE0, 0x03, 0xF0, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFE, 0x0F, 0xC0, 0x07, 0xE0, 0x03, 0xF0, 0x01, 0xF8, 0x00, 0xFC, - 0x00, 0x7E, 0x00, 0x3F, 0x00, 0x1F, 0x80, 0x0F, 0xC0, 0x07, 0xE0, 0x03, - 0xF0, 0x01, 0xF8, 0x00, 0xFC, 0x00, 0x7E, 0x00, 0x3F, 0x00, 0x1F, 0x80, - 0x0F, 0xC0, 0x07, 0xE0, 0x03, 0xF0, 0x01, 0xF8, 0x00, 0xFC, 0x00, 0x7E, - 0x00, 0x3F, 0x00, 0x1F, 0x80, 0x0F, 0xC0, 0x07, 0xE0, 0x03, 0xF0, 0x01, - 0xF8, 0x00, 0xFF, 0xF0, 0x7F, 0xF8, 0x1F, 0xFC, 0x0F, 0xFE, 0x03, 0xFF, - 0x00, 0x1E, 0x00, 0xFC, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0x00, - 0x00, 0x7F, 0xF8, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x1F, 0xFE, 0x00, 0x00, - 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x3F, 0xFC, 0x00, 0x01, 0xFF, - 0xE0, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x03, 0xFF, 0xC0, - 0x00, 0x1F, 0xFE, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0x80, 0x00, - 0x3F, 0xFC, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x7F, - 0xF8, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0xFF, 0xF0, - 0x00, 0x07, 0xFF, 0x80, 0x00, 0x3F, 0xFC, 0x00, 0x01, 0xFF, 0xE0, 0x00, - 0x0F, 0xFF, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x3F, - 0xFE, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, - 0x80, 0x7E, 0xFB, 0xFF, 0xFF, 0xF7, 0xCF, 0xFF, 0xFF, 0x3E, 0x7F, 0xFF, - 0xF1, 0xF0, 0xFF, 0xFE, 0x0F, 0x83, 0xFF, 0xE0, 0x00, 0x01, 0xE0, 0x00, - 0x00, 0xFE, 0x00, 0x00, 0x1F, 0xBF, 0x80, 0x00, 0x0F, 0xE7, 0xE0, 0x00, - 0x03, 0xF1, 0xFC, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0x00, 0x7F, 0x0F, 0xC0, - 0x00, 0x1F, 0x83, 0xF8, 0x00, 0x0F, 0xE0, 0xFE, 0x00, 0x03, 0xF8, 0x1F, - 0x80, 0x00, 0xFC, 0x07, 0xF0, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x1F, 0x80, - 0x3F, 0x00, 0x07, 0xE0, 0x0F, 0xE0, 0x03, 0xF8, 0x01, 0xF8, 0x00, 0xFC, - 0x00, 0x7E, 0x00, 0x3F, 0x00, 0x1F, 0xC0, 0x1F, 0x80, 0x03, 0xF0, 0x07, - 0xE0, 0x00, 0xFC, 0x01, 0xF8, 0x00, 0x3F, 0x80, 0xFC, 0x00, 0x07, 0xE0, - 0x3F, 0x00, 0x01, 0xF8, 0x0F, 0xC0, 0x00, 0x7F, 0x07, 0xE0, 0x00, 0x0F, - 0xC1, 0xF8, 0x00, 0x03, 0xF0, 0x7C, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, - 0x1F, 0x8F, 0xC0, 0x00, 0x07, 0xE3, 0xE0, 0x00, 0x01, 0xFD, 0xF8, 0x00, - 0x00, 0x3F, 0x7E, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0xC0, - 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x03, 0xFE, - 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x00, 0x7E, 0x00, 0x07, 0xF8, 0x00, 0x1F, 0xDF, 0x80, 0x01, - 0xFE, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x7F, 0xC0, 0x01, 0xF8, 0xFC, 0x00, - 0x1F, 0xF0, 0x00, 0x7E, 0x3F, 0x00, 0x0F, 0xFC, 0x00, 0x3F, 0x8F, 0xC0, - 0x03, 0xFF, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0xFF, 0xE0, 0x03, 0xF0, 0x7E, - 0x00, 0x3F, 0xF8, 0x00, 0xFC, 0x1F, 0x80, 0x0F, 0xFE, 0x00, 0x7F, 0x07, - 0xF0, 0x07, 0xEF, 0x80, 0x1F, 0x80, 0xFC, 0x01, 0xF3, 0xF0, 0x07, 0xE0, - 0x3F, 0x00, 0x7C, 0xFC, 0x01, 0xF8, 0x0F, 0xC0, 0x1F, 0x3F, 0x00, 0xFE, - 0x03, 0xF8, 0x0F, 0xC7, 0xC0, 0x3F, 0x00, 0x7E, 0x03, 0xE1, 0xF8, 0x0F, - 0xC0, 0x1F, 0x80, 0xF8, 0x7E, 0x03, 0xF0, 0x07, 0xE0, 0x3E, 0x1F, 0x81, - 0xF8, 0x00, 0xFC, 0x1F, 0x83, 0xE0, 0x7E, 0x00, 0x3F, 0x07, 0xC0, 0xFC, - 0x1F, 0x80, 0x0F, 0xC1, 0xF0, 0x3F, 0x07, 0xC0, 0x03, 0xF0, 0x7C, 0x0F, - 0xC3, 0xF0, 0x00, 0x7E, 0x3F, 0x01, 0xF0, 0xFC, 0x00, 0x1F, 0x8F, 0x80, - 0x7E, 0x3F, 0x00, 0x07, 0xE3, 0xE0, 0x1F, 0x8F, 0x80, 0x00, 0xF8, 0xF8, - 0x07, 0xE7, 0xE0, 0x00, 0x3F, 0x7E, 0x00, 0xF9, 0xF8, 0x00, 0x0F, 0xDF, - 0x00, 0x3F, 0x7C, 0x00, 0x03, 0xF7, 0xC0, 0x0F, 0xDF, 0x00, 0x00, 0x7D, - 0xF0, 0x03, 0xFF, 0xC0, 0x00, 0x1F, 0xFC, 0x00, 0x7F, 0xF0, 0x00, 0x07, - 0xFF, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0xFF, 0x80, 0x07, 0xFE, 0x00, 0x00, - 0x3F, 0xE0, 0x01, 0xFF, 0x80, 0x00, 0x0F, 0xF8, 0x00, 0x3F, 0xC0, 0x00, - 0x03, 0xFE, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x7F, 0x00, 0x03, 0xFC, 0x00, - 0x00, 0x1F, 0xC0, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x1F, - 0xC0, 0x00, 0x7F, 0x07, 0xE0, 0x00, 0x3F, 0x03, 0xF8, 0x00, 0x3F, 0x80, - 0xFE, 0x00, 0x3F, 0x80, 0x3F, 0x00, 0x1F, 0x80, 0x1F, 0xC0, 0x1F, 0xC0, - 0x07, 0xF0, 0x1F, 0xC0, 0x01, 0xF8, 0x0F, 0xC0, 0x00, 0x7E, 0x0F, 0xE0, - 0x00, 0x3F, 0x8F, 0xE0, 0x00, 0x0F, 0xC7, 0xE0, 0x00, 0x03, 0xF7, 0xE0, - 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x1F, 0xF0, - 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0xFF, - 0xE0, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7E, 0xFE, 0x00, 0x00, 0x7E, - 0x3F, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x7F, 0x07, 0xF0, 0x00, 0x3F, - 0x03, 0xF8, 0x00, 0x3F, 0x80, 0xFE, 0x00, 0x3F, 0x80, 0x3F, 0x80, 0x1F, - 0x80, 0x1F, 0xC0, 0x1F, 0xC0, 0x07, 0xF0, 0x1F, 0xC0, 0x01, 0xFC, 0x0F, - 0xC0, 0x00, 0xFE, 0x0F, 0xE0, 0x00, 0x3F, 0x8F, 0xE0, 0x00, 0x0F, 0xE7, - 0xE0, 0x00, 0x07, 0xF0, 0x7E, 0x00, 0x00, 0x3F, 0xBF, 0x00, 0x00, 0x1F, - 0x9F, 0xC0, 0x00, 0x0F, 0xC7, 0xE0, 0x00, 0x0F, 0xE3, 0xF0, 0x00, 0x07, - 0xE1, 0xFC, 0x00, 0x03, 0xF0, 0x7E, 0x00, 0x03, 0xF0, 0x3F, 0x00, 0x01, - 0xF8, 0x1F, 0xC0, 0x01, 0xFC, 0x07, 0xE0, 0x00, 0xFC, 0x03, 0xF0, 0x00, - 0x7E, 0x01, 0xFC, 0x00, 0x7F, 0x00, 0x7E, 0x00, 0x3F, 0x00, 0x3F, 0x00, - 0x1F, 0x80, 0x1F, 0xC0, 0x1F, 0xC0, 0x07, 0xE0, 0x0F, 0xC0, 0x03, 0xF0, - 0x07, 0xE0, 0x01, 0xFC, 0x07, 0xE0, 0x00, 0x7E, 0x03, 0xF0, 0x00, 0x3F, - 0x01, 0xF8, 0x00, 0x1F, 0xC1, 0xF8, 0x00, 0x07, 0xE0, 0xFC, 0x00, 0x03, - 0xF0, 0xFE, 0x00, 0x01, 0xFC, 0x7E, 0x00, 0x00, 0x7E, 0x3F, 0x00, 0x00, - 0x3F, 0x3F, 0x00, 0x00, 0x1F, 0xDF, 0x80, 0x00, 0x07, 0xEF, 0xC0, 0x00, - 0x03, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, 0x7F, 0xF0, 0x00, - 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x07, 0xFC, 0x00, - 0x00, 0x03, 0xFC, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x1F, 0x80, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x07, 0xE0, - 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x03, 0xF8, - 0x00, 0x00, 0x67, 0xFC, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x1F, 0xFC, - 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x03, 0xFC, - 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xE3, 0xFF, - 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xF8, 0x00, 0x00, - 0x0F, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x1F, - 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0xC0, 0x00, - 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x1F, 0xE0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0x1F, 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, - 0xC0, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x1F, - 0x80, 0x3F, 0xC0, 0x3F, 0xE0, 0x3F, 0xF0, 0x3F, 0xF8, 0x1F, 0x80, 0x0F, - 0xC0, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x7C, 0x00, - 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, - 0x00, 0xF8, 0x00, 0x7C, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07, - 0xC0, 0x07, 0xE0, 0x03, 0xF0, 0x01, 0xF8, 0x00, 0xFC, 0x00, 0xFC, 0x00, - 0x7E, 0x00, 0xFE, 0x01, 0xFF, 0x00, 0xFE, 0x00, 0x7E, 0x00, 0x3F, 0x80, - 0x1F, 0xE0, 0x07, 0xF8, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0x80, 0x07, - 0xE0, 0x03, 0xF0, 0x01, 0xF8, 0x00, 0xFC, 0x00, 0x3E, 0x00, 0x1F, 0x00, - 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x7C, - 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, - 0xF0, 0x00, 0xF8, 0x00, 0x7C, 0x00, 0x3E, 0x00, 0x1F, 0x80, 0x0F, 0xFE, - 0x03, 0xFF, 0x00, 0xFF, 0x80, 0x7F, 0xC0, 0x0F, 0xE0, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF8, 0x00, 0x7F, 0x80, 0x3F, - 0xE0, 0x1F, 0xF8, 0x0F, 0xFC, 0x00, 0x7F, 0x00, 0x1F, 0x80, 0x07, 0xC0, - 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x7C, 0x00, 0x3E, 0x00, 0x1F, - 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00, - 0x7C, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, - 0x01, 0xF0, 0x00, 0xFC, 0x00, 0x7E, 0x00, 0x1F, 0x00, 0x0F, 0xC0, 0x03, - 0xF8, 0x00, 0xFF, 0x00, 0x3F, 0x80, 0x0F, 0xC0, 0x0F, 0xE0, 0x0F, 0xF0, - 0x0F, 0xE0, 0x0F, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x03, 0xF0, 0x01, 0xF8, - 0x00, 0xF8, 0x00, 0x7C, 0x00, 0x3E, 0x00, 0x1F, 0x00, 0x0F, 0x80, 0x07, - 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x7C, 0x00, 0x3E, 0x00, - 0x1F, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8, - 0x00, 0x7C, 0x00, 0x7E, 0x00, 0x3F, 0x03, 0xFF, 0x01, 0xFF, 0x80, 0xFF, - 0x80, 0x7F, 0x80, 0x3F, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x1F, 0xF0, - 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x79, 0xFF, 0xF8, 0x00, 0xF7, 0xFF, 0xFC, - 0x01, 0xEF, 0x83, 0xFC, 0x03, 0xDE, 0x03, 0xFE, 0x0F, 0xBC, 0x01, 0xFF, - 0xFE, 0xF0, 0x01, 0xFF, 0xFD, 0xE0, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0xFF, - 0xC0, 0x00, 0x00, 0x3E, 0x00}; - -static const GFXglyph FreeSans36pt7bGlyphs[] = { - {0, 0, 0, 20, 0, 1} // ' ' - , - {0, 6, 52, 20, 9, -51} // '!' - , - {39, 18, 17, 25, 4, -49} // '"' - , - {78, 37, 50, 39, 1, -49} // '#' - , - {310, 35, 64, 39, 2, -54} // '$' - , - {590, 59, 51, 63, 2, -49} // '%' - , - {967, 41, 52, 47, 4, -49} // '&' - , - {1234, 7, 17, 14, 3, -49} // ''' - , - {1249, 16, 67, 24, 5, -51} // '(' - , - {1383, 15, 67, 24, 3, -51} // ')' - , - {1509, 21, 21, 28, 3, -51} // '*' - , - {1565, 34, 35, 41, 4, -33} // '+' - , - {1714, 8, 17, 20, 6, -6} // ',' - , - {1731, 17, 5, 24, 3, -21} // '-' - , - {1742, 8, 7, 20, 6, -6} // '.' - , - {1749, 21, 53, 20, -1, -51} // '/' - , - {1889, 33, 52, 39, 3, -51} // '0' - , - {2104, 18, 52, 39, 7, -51} // '1' - , - {2221, 34, 52, 39, 2, -51} // '2' - , - {2442, 34, 52, 39, 2, -51} // '3' - , - {2663, 35, 52, 39, 2, -51} // '4' - , - {2891, 34, 52, 39, 2, -51} // '5' - , - {3112, 33, 52, 39, 3, -51} // '6' - , - {3327, 34, 52, 39, 3, -51} // '7' - , - {3548, 33, 52, 39, 3, -51} // '8' - , - {3763, 33, 52, 39, 3, -51} // '9' - , - {3978, 7, 37, 20, 8, -36} // ':' - , - {4011, 7, 47, 20, 8, -36} // ';' - , - {4053, 35, 35, 41, 3, -33} // '<' - , - {4207, 34, 17, 41, 4, -24} // '=' - , - {4280, 34, 35, 41, 4, -33} // '>' - , - {4429, 31, 53, 39, 5, -52} // '?' - , - {4635, 66, 63, 72, 2, -52} // '@' - , - {5155, 45, 52, 47, 1, -51} // 'A' - , - {5448, 38, 52, 47, 6, -51} // 'B' - , - {5695, 45, 55, 51, 3, -52} // 'C' - , - {6005, 41, 52, 51, 6, -51} // 'D' - , - {6272, 38, 52, 47, 6, -51} // 'E' - , - {6519, 35, 52, 43, 6, -51} // 'F' - , - {6747, 47, 55, 55, 3, -52} // 'G' - , - {7071, 40, 52, 51, 6, -51} // 'H' - , - {7331, 7, 52, 20, 7, -51} // 'I' - , - {7377, 29, 54, 36, 1, -51} // 'J' - , - {7573, 41, 52, 47, 6, -51} // 'K' - , - {7840, 32, 52, 39, 6, -51} // 'L' - , - {8048, 49, 52, 59, 5, -51} // 'M' - , - {8367, 41, 52, 51, 5, -51} // 'N' - , - {8634, 50, 55, 55, 3, -52} // 'O' - , - {8978, 38, 52, 47, 6, -51} // 'P' - , - {9225, 50, 57, 55, 3, -52} // 'Q' - , - {9582, 41, 52, 51, 7, -51} // 'R' - , - {9849, 41, 55, 47, 3, -52} // 'S' - , - {10131, 41, 52, 43, 1, -51} // 'T' - , - {10398, 40, 54, 51, 6, -51} // 'U' - , - {10668, 44, 52, 47, 2, -51} // 'V' - , - {10954, 64, 52, 67, 2, -51} // 'W' - , - {11370, 44, 52, 47, 2, -51} // 'X' - , - {11656, 46, 52, 47, 1, -51} // 'Y' - , - {11955, 39, 52, 43, 2, -51} // 'Z' - , - {12209, 13, 67, 20, 5, -51} // '[' - , - {12318, 21, 53, 20, -1, -51} // '\' - , - {12458, 13, 67, 20, 2, -51} // ']' - , - {12567, 27, 27, 33, 3, -49} // '^' - , - {12659, 43, 3, 39, -2, 10} // '_' - , - {12676, 14, 11, 24, 2, -52} // '`' - , - {12696, 35, 40, 39, 3, -37} // 'a' - , - {12871, 33, 54, 39, 4, -51} // 'b' - , - {13094, 32, 40, 36, 2, -37} // 'c' - , - {13254, 33, 54, 39, 2, -51} // 'd' - , - {13477, 33, 40, 39, 3, -37} // 'e' - , - {13642, 17, 52, 20, 1, -51} // 'f' - , - {13753, 33, 53, 39, 2, -37} // 'g' - , - {13972, 30, 52, 39, 5, -51} // 'h' - , - {14167, 6, 52, 16, 5, -51} // 'i' - , - {14206, 12, 67, 16, -1, -51} // 'j' - , - {14307, 32, 52, 36, 4, -51} // 'k' - , - {14515, 6, 52, 16, 5, -51} // 'l' - , - {14554, 49, 38, 59, 5, -37} // 'm' - , - {14787, 30, 38, 39, 5, -37} // 'n' - , - {14930, 33, 40, 39, 3, -37} // 'o' - , - {15095, 33, 53, 39, 4, -37} // 'p' - , - {15314, 33, 53, 39, 2, -37} // 'q' - , - {15533, 18, 38, 24, 5, -37} // 'r' - , - {15619, 31, 40, 36, 2, -37} // 's' - , - {15774, 17, 49, 20, 1, -46} // 't' - , - {15879, 29, 39, 39, 5, -36} // 'u' - , - {16021, 34, 37, 36, 1, -36} // 'v' - , - {16179, 50, 37, 51, 0, -36} // 'w' - , - {16411, 33, 37, 36, 1, -36} // 'x' - , - {16564, 33, 52, 36, 1, -36} // 'y' - , - {16779, 30, 37, 36, 2, -36} // 'z' - , - {16918, 17, 67, 24, 3, -51} // '{' - , - {17061, 4, 67, 18, 7, -51} // '|' - , - {17095, 17, 67, 24, 2, -51} // '}' - , - {17238, 31, 12, 41, 5, -30} // '~' -}; - -static const GFXfont FreeSans36pt7b = { - (const uint8_t *)FreeSans36pt7bBitmaps, - (const GFXglyph *)FreeSans36pt7bGlyphs, - 0x20, 0x7E, 99}; - -static const unsigned char rastr_font[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, - 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, - 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, - 0x18, 0x3C, 0x7E, 0x3C, 0x18, - 0x1C, 0x57, 0x7D, 0x57, 0x1C, - 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, - 0x00, 0x18, 0x3C, 0x18, 0x00, - 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, - 0x00, 0x18, 0x24, 0x18, 0x00, - 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, - 0x30, 0x48, 0x3A, 0x06, 0x0E, - 0x26, 0x29, 0x79, 0x29, 0x26, - 0x40, 0x7F, 0x05, 0x05, 0x07, - 0x40, 0x7F, 0x05, 0x25, 0x3F, - 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, - 0x7F, 0x3E, 0x1C, 0x1C, 0x08, - 0x08, 0x1C, 0x1C, 0x3E, 0x7F, - 0x14, 0x22, 0x7F, 0x22, 0x14, - 0x5F, 0x5F, 0x00, 0x5F, 0x5F, - 0x06, 0x09, 0x7F, 0x01, 0x7F, - 0x00, 0x66, 0x89, 0x95, 0x6A, - 0x60, 0x60, 0x60, 0x60, 0x60, - 0x94, 0xA2, 0xFF, 0xA2, 0x94, - 0x08, 0x04, 0x7E, 0x04, 0x08, - 0x10, 0x20, 0x7E, 0x20, 0x10, - 0x08, 0x08, 0x2A, 0x1C, 0x08, - 0x08, 0x1C, 0x2A, 0x08, 0x08, - 0x1E, 0x10, 0x10, 0x10, 0x10, - 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, - 0x30, 0x38, 0x3E, 0x38, 0x30, - 0x06, 0x0E, 0x3E, 0x0E, 0x06, - 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x5F, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x07, 0x00, - 0x14, 0x7F, 0x14, 0x7F, 0x14, - 0x24, 0x2A, 0x7F, 0x2A, 0x12, - 0x23, 0x13, 0x08, 0x64, 0x62, - 0x36, 0x49, 0x56, 0x20, 0x50, - 0x00, 0x08, 0x07, 0x03, 0x00, - 0x00, 0x1C, 0x22, 0x41, 0x00, - 0x00, 0x41, 0x22, 0x1C, 0x00, - 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, - 0x08, 0x08, 0x3E, 0x08, 0x08, - 0x00, 0x80, 0x70, 0x30, 0x00, - 0x08, 0x08, 0x08, 0x08, 0x08, - 0x00, 0x00, 0x60, 0x60, 0x00, - 0x20, 0x10, 0x08, 0x04, 0x02, - 0x3E, 0x51, 0x49, 0x45, 0x3E, - 0x00, 0x42, 0x7F, 0x40, 0x00, - 0x72, 0x49, 0x49, 0x49, 0x46, - 0x21, 0x41, 0x49, 0x4D, 0x33, - 0x18, 0x14, 0x12, 0x7F, 0x10, - 0x27, 0x45, 0x45, 0x45, 0x39, - 0x3C, 0x4A, 0x49, 0x49, 0x31, - 0x41, 0x21, 0x11, 0x09, 0x07, - 0x36, 0x49, 0x49, 0x49, 0x36, - 0x46, 0x49, 0x49, 0x29, 0x1E, - 0x00, 0x00, 0x14, 0x00, 0x00, - 0x00, 0x40, 0x34, 0x00, 0x00, - 0x00, 0x08, 0x14, 0x22, 0x41, - 0x14, 0x14, 0x14, 0x14, 0x14, - 0x00, 0x41, 0x22, 0x14, 0x08, - 0x02, 0x01, 0x59, 0x09, 0x06, - 0x3E, 0x41, 0x5D, 0x59, 0x4E, - 0x7C, 0x12, 0x11, 0x12, 0x7C, - 0x7F, 0x49, 0x49, 0x49, 0x36, - 0x3E, 0x41, 0x41, 0x41, 0x22, - 0x7F, 0x41, 0x41, 0x41, 0x3E, - 0x7F, 0x49, 0x49, 0x49, 0x41, - 0x7F, 0x09, 0x09, 0x09, 0x01, - 0x3E, 0x41, 0x41, 0x51, 0x73, - 0x7F, 0x08, 0x08, 0x08, 0x7F, - 0x00, 0x41, 0x7F, 0x41, 0x00, - 0x20, 0x40, 0x41, 0x3F, 0x01, - 0x7F, 0x08, 0x14, 0x22, 0x41, - 0x7F, 0x40, 0x40, 0x40, 0x40, - 0x7F, 0x02, 0x1C, 0x02, 0x7F, - 0x7F, 0x04, 0x08, 0x10, 0x7F, - 0x3E, 0x41, 0x41, 0x41, 0x3E, - 0x7F, 0x09, 0x09, 0x09, 0x06, - 0x3E, 0x41, 0x51, 0x21, 0x5E, - 0x7F, 0x09, 0x19, 0x29, 0x46, - 0x26, 0x49, 0x49, 0x49, 0x32, - 0x03, 0x01, 0x7F, 0x01, 0x03, - 0x3F, 0x40, 0x40, 0x40, 0x3F, - 0x1F, 0x20, 0x40, 0x20, 0x1F, - 0x3F, 0x40, 0x38, 0x40, 0x3F, - 0x63, 0x14, 0x08, 0x14, 0x63, - 0x03, 0x04, 0x78, 0x04, 0x03, - 0x61, 0x59, 0x49, 0x4D, 0x43, - 0x00, 0x7F, 0x41, 0x41, 0x41, - 0x02, 0x04, 0x08, 0x10, 0x20, - 0x00, 0x41, 0x41, 0x41, 0x7F, - 0x04, 0x02, 0x01, 0x02, 0x04, - 0x40, 0x40, 0x40, 0x40, 0x40, - 0x00, 0x03, 0x07, 0x08, 0x00, - 0x20, 0x54, 0x54, 0x78, 0x40, - 0x7F, 0x28, 0x44, 0x44, 0x38, - 0x38, 0x44, 0x44, 0x44, 0x28, - 0x38, 0x44, 0x44, 0x28, 0x7F, - 0x38, 0x54, 0x54, 0x54, 0x18, - 0x00, 0x08, 0x7E, 0x09, 0x02, - 0x18, 0xA4, 0xA4, 0x9C, 0x78, - 0x7F, 0x08, 0x04, 0x04, 0x78, - 0x00, 0x44, 0x7D, 0x40, 0x00, - 0x20, 0x40, 0x40, 0x3D, 0x00, - 0x7F, 0x10, 0x28, 0x44, 0x00, - 0x00, 0x41, 0x7F, 0x40, 0x00, - 0x7C, 0x04, 0x78, 0x04, 0x78, - 0x7C, 0x08, 0x04, 0x04, 0x78, - 0x38, 0x44, 0x44, 0x44, 0x38, - 0xFC, 0x18, 0x24, 0x24, 0x18, - 0x18, 0x24, 0x24, 0x18, 0xFC, - 0x7C, 0x08, 0x04, 0x04, 0x08, - 0x48, 0x54, 0x54, 0x54, 0x24, - 0x04, 0x04, 0x3F, 0x44, 0x24, - 0x3C, 0x40, 0x40, 0x20, 0x7C, - 0x1C, 0x20, 0x40, 0x20, 0x1C, - 0x3C, 0x40, 0x30, 0x40, 0x3C, - 0x44, 0x28, 0x10, 0x28, 0x44, - 0x4C, 0x90, 0x90, 0x90, 0x7C, - 0x44, 0x64, 0x54, 0x4C, 0x44, - 0x00, 0x08, 0x36, 0x41, 0x00, - 0x00, 0x00, 0x77, 0x00, 0x00, - 0x00, 0x41, 0x36, 0x08, 0x00, - 0x02, 0x01, 0x02, 0x04, 0x02, - 0x3C, 0x26, 0x23, 0x26, 0x3C, - 0x1E, 0xA1, 0xA1, 0x61, 0x12, - 0x3A, 0x40, 0x40, 0x20, 0x7A, - 0x38, 0x54, 0x54, 0x55, 0x59, - 0x21, 0x55, 0x55, 0x79, 0x41, - 0x22, 0x54, 0x54, 0x78, 0x42, - 0x21, 0x55, 0x54, 0x78, 0x40, - 0x20, 0x54, 0x55, 0x79, 0x40, - 0x0C, 0x1E, 0x52, 0x72, 0x12, - 0x39, 0x55, 0x55, 0x55, 0x59, - 0x39, 0x54, 0x54, 0x54, 0x59, - 0x39, 0x55, 0x54, 0x54, 0x58, - 0x00, 0x00, 0x45, 0x7C, 0x41, - 0x00, 0x02, 0x45, 0x7D, 0x42, - 0x00, 0x01, 0x45, 0x7C, 0x40, - 0x7D, 0x12, 0x11, 0x12, 0x7D, - 0xF0, 0x28, 0x25, 0x28, 0xF0, - 0x7C, 0x54, 0x55, 0x45, 0x00, - 0x20, 0x54, 0x54, 0x7C, 0x54, - 0x7C, 0x0A, 0x09, 0x7F, 0x49, - 0x32, 0x49, 0x49, 0x49, 0x32, - 0x3A, 0x44, 0x44, 0x44, 0x3A, - 0x32, 0x4A, 0x48, 0x48, 0x30, - 0x3A, 0x41, 0x41, 0x21, 0x7A, - 0x3A, 0x42, 0x40, 0x20, 0x78, - 0x00, 0x9D, 0xA0, 0xA0, 0x7D, - 0x3D, 0x42, 0x42, 0x42, 0x3D, - 0x3D, 0x40, 0x40, 0x40, 0x3D, - 0x3C, 0x24, 0xFF, 0x24, 0x24, - 0x48, 0x7E, 0x49, 0x43, 0x66, - 0x2B, 0x2F, 0xFC, 0x2F, 0x2B, - 0xFF, 0x09, 0x29, 0xF6, 0x20, - 0xC0, 0x88, 0x7E, 0x09, 0x03, - 0x20, 0x54, 0x54, 0x79, 0x41, - 0x00, 0x00, 0x44, 0x7D, 0x41, - 0x30, 0x48, 0x48, 0x4A, 0x32, - 0x38, 0x40, 0x40, 0x22, 0x7A, - 0x00, 0x7A, 0x0A, 0x0A, 0x72, - 0x7D, 0x0D, 0x19, 0x31, 0x7D, - 0x26, 0x29, 0x29, 0x2F, 0x28, - 0x26, 0x29, 0x29, 0x29, 0x26, - 0x30, 0x48, 0x4D, 0x40, 0x20, - 0x38, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x08, 0x38, - 0x2F, 0x10, 0xC8, 0xAC, 0xBA, - 0x2F, 0x10, 0x28, 0x34, 0xFA, - 0x00, 0x00, 0x7B, 0x00, 0x00, - 0x08, 0x14, 0x2A, 0x14, 0x22, - 0x22, 0x14, 0x2A, 0x14, 0x08, - 0x55, 0x00, 0x55, 0x00, 0x55, - 0xAA, 0x55, 0xAA, 0x55, 0xAA, - 0xFF, 0x55, 0xFF, 0x55, 0xFF, - 0x00, 0x00, 0x00, 0xFF, 0x00, - 0x10, 0x10, 0x10, 0xFF, 0x00, - 0x14, 0x14, 0x14, 0xFF, 0x00, - 0x10, 0x10, 0xFF, 0x00, 0xFF, - 0x10, 0x10, 0xF0, 0x10, 0xF0, - 0x14, 0x14, 0x14, 0xFC, 0x00, - 0x14, 0x14, 0xF7, 0x00, 0xFF, - 0x00, 0x00, 0xFF, 0x00, 0xFF, - 0x14, 0x14, 0xF4, 0x04, 0xFC, - 0x14, 0x14, 0x17, 0x10, 0x1F, - 0x10, 0x10, 0x1F, 0x10, 0x1F, - 0x14, 0x14, 0x14, 0x1F, 0x00, - 0x10, 0x10, 0x10, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0x10, - 0x10, 0x10, 0x10, 0x1F, 0x10, - 0x10, 0x10, 0x10, 0xF0, 0x10, - 0x00, 0x00, 0x00, 0xFF, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0xFF, 0x10, - 0x00, 0x00, 0x00, 0xFF, 0x14, - 0x00, 0x00, 0xFF, 0x00, 0xFF, - 0x00, 0x00, 0x1F, 0x10, 0x17, - 0x00, 0x00, 0xFC, 0x04, 0xF4, - 0x14, 0x14, 0x17, 0x10, 0x17, - 0x14, 0x14, 0xF4, 0x04, 0xF4, - 0x00, 0x00, 0xFF, 0x00, 0xF7, - 0x14, 0x14, 0x14, 0x14, 0x14, - 0x14, 0x14, 0xF7, 0x00, 0xF7, - 0x14, 0x14, 0x14, 0x17, 0x14, - 0x10, 0x10, 0x1F, 0x10, 0x1F, - 0x14, 0x14, 0x14, 0xF4, 0x14, - 0x10, 0x10, 0xF0, 0x10, 0xF0, - 0x00, 0x00, 0x1F, 0x10, 0x1F, - 0x00, 0x00, 0x00, 0x1F, 0x14, - 0x00, 0x00, 0x00, 0xFC, 0x14, - 0x00, 0x00, 0xF0, 0x10, 0xF0, - 0x10, 0x10, 0xFF, 0x10, 0xFF, - 0x14, 0x14, 0x14, 0xFF, 0x14, - 0x10, 0x10, 0x10, 0x1F, 0x00, - 0x00, 0x00, 0x00, 0xF0, 0x10, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, - 0xFF, 0xFF, 0xFF, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0xFF, - 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, - 0x38, 0x44, 0x44, 0x38, 0x44, - 0xFC, 0x4A, 0x4A, 0x4A, 0x34, - 0x7E, 0x02, 0x02, 0x06, 0x06, - 0x02, 0x7E, 0x02, 0x7E, 0x02, - 0x63, 0x55, 0x49, 0x41, 0x63, - 0x38, 0x44, 0x44, 0x3C, 0x04, - 0x40, 0x7E, 0x20, 0x1E, 0x20, - 0x06, 0x02, 0x7E, 0x02, 0x02, - 0x99, 0xA5, 0xE7, 0xA5, 0x99, - 0x1C, 0x2A, 0x49, 0x2A, 0x1C, - 0x4C, 0x72, 0x01, 0x72, 0x4C, - 0x30, 0x4A, 0x4D, 0x4D, 0x30, - 0x30, 0x48, 0x78, 0x48, 0x30, - 0xBC, 0x62, 0x5A, 0x46, 0x3D, - 0x3E, 0x49, 0x49, 0x49, 0x00, - 0x7E, 0x01, 0x01, 0x01, 0x7E, - 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, - 0x44, 0x44, 0x5F, 0x44, 0x44, - 0x40, 0x51, 0x4A, 0x44, 0x40, - 0x40, 0x44, 0x4A, 0x51, 0x40, - 0x00, 0x00, 0xFF, 0x01, 0x03, - 0xE0, 0x80, 0xFF, 0x00, 0x00, - 0x08, 0x08, 0x6B, 0x6B, 0x08, - 0x36, 0x12, 0x36, 0x24, 0x36, - 0x06, 0x0F, 0x09, 0x0F, 0x06, - 0x00, 0x00, 0x18, 0x18, 0x00, - 0x00, 0x00, 0x10, 0x10, 0x00, - 0x30, 0x40, 0xFF, 0x01, 0x01, - 0x00, 0x1F, 0x01, 0x01, 0x1E, - 0x00, 0x19, 0x1D, 0x17, 0x12, - 0x00, 0x3C, 0x3C, 0x3C, 0x3C, - 0x00, 0x00, 0x00, 0x00, 0x00}; - -static const uint8_t FreeSans7pt7bBitmaps[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x40, 0xB6, - 0xD0, 0x12, 0x28, 0xD3, 0xF2, 0x44, 0xBF, 0x94, 0x48, 0x90, 0x10, 0x71, - 0x52, 0x95, 0x0E, 0x07, 0x09, 0x52, 0xA5, 0xF0, 0x81, 0x00, 0x00, 0x87, - 0x88, 0x89, 0x08, 0x90, 0x72, 0x00, 0x00, 0x04, 0xE0, 0x91, 0x09, 0x11, - 0x0E, 0x30, 0x48, 0x48, 0x48, 0x30, 0x52, 0x9A, 0x8C, 0x8E, 0xFA, 0xF0, - 0x29, 0x49, 0x24, 0x99, 0x22, 0x91, 0x24, 0x9A, 0x49, 0x48, 0x4F, 0x4A, - 0x10, 0x41, 0x1F, 0x10, 0x41, 0x00, 0xD8, 0xE0, 0xC0, 0x10, 0x22, 0x04, - 0x44, 0x88, 0x31, 0x2C, 0xE1, 0x86, 0x18, 0x61, 0x49, 0xE0, 0x13, 0xF1, - 0x11, 0x11, 0x11, 0x18, 0xCD, 0x0A, 0x10, 0x61, 0x8C, 0x30, 0x40, 0xFC, - 0x38, 0xC9, 0x18, 0x31, 0xC3, 0x80, 0xA1, 0x46, 0x78, 0x00, 0x04, 0x18, - 0x71, 0xE2, 0xC9, 0xB3, 0x7F, 0x0C, 0x18, 0x7E, 0x81, 0x02, 0x07, 0xC8, - 0xC0, 0x81, 0x46, 0xF8, 0x31, 0x28, 0x60, 0xFB, 0x38, 0x61, 0x8D, 0xE0, - 0xFC, 0x10, 0x82, 0x10, 0xC2, 0x08, 0x61, 0x00, 0x31, 0x28, 0x61, 0x79, - 0x28, 0x61, 0xCD, 0xE0, 0x73, 0x68, 0xE1, 0x8F, 0x72, 0x43, 0x89, 0xE0, - 0x82, 0x83, 0x80, 0x00, 0x33, 0x30, 0xE0, 0xE0, 0x40, 0xFC, 0x0F, 0xC0, - 0x03, 0x03, 0x03, 0x1D, 0xC8, 0x00, 0x7B, 0x38, 0x43, 0x18, 0x43, 0x00, - 0x00, 0xC0, 0x0F, 0xC0, 0xC3, 0x08, 0x04, 0x8E, 0xB4, 0xCC, 0xA4, 0x47, - 0x22, 0x29, 0x12, 0x4F, 0xE3, 0x00, 0x0E, 0x00, 0x1F, 0x00, 0x0C, 0x0E, - 0x05, 0x02, 0xC2, 0x21, 0x11, 0xFC, 0x82, 0x41, 0x60, 0xC0, 0xFC, 0x86, - 0x82, 0x82, 0xFC, 0x86, 0x82, 0x83, 0x82, 0xFC, 0x3E, 0x43, 0xC1, 0x80, - 0x80, 0x80, 0x81, 0x81, 0x43, 0x7E, 0xFC, 0xC6, 0xC3, 0xC1, 0xC1, 0xC1, - 0xC1, 0xC3, 0xC6, 0xFC, 0xFF, 0x83, 0x06, 0x0F, 0xF8, 0x30, 0x60, 0xC1, - 0xFC, 0xFF, 0x83, 0x06, 0x0F, 0xD8, 0x30, 0x60, 0xC1, 0x80, 0x3E, 0x21, - 0xB0, 0x50, 0x08, 0x04, 0x3E, 0x03, 0x03, 0x41, 0x9F, 0x40, 0x81, 0x81, - 0x81, 0x81, 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF, 0xFF, 0xF0, 0x04, - 0x10, 0x41, 0x04, 0x10, 0x71, 0xCD, 0xE0, 0x82, 0x84, 0x88, 0x90, 0xB0, - 0xD8, 0x8C, 0x84, 0x86, 0x83, 0x82, 0x08, 0x20, 0x82, 0x08, 0x20, 0x83, - 0xF0, 0xC1, 0xE0, 0xE8, 0x74, 0x7A, 0x2C, 0x96, 0x5B, 0x29, 0x8C, 0xC6, - 0x40, 0xC1, 0xC1, 0xA1, 0xB1, 0x91, 0x89, 0x8D, 0x85, 0x87, 0x83, 0x3E, - 0x21, 0xA0, 0x70, 0x18, 0x0C, 0x06, 0x03, 0x03, 0x43, 0x1F, 0x00, 0xFD, - 0x8F, 0x0E, 0x1C, 0x7F, 0xB0, 0x60, 0xC1, 0x80, 0x3E, 0x21, 0xA0, 0x70, - 0x18, 0x0C, 0x06, 0x03, 0x0B, 0x43, 0x1F, 0x80, 0x20, 0xFE, 0xC3, 0xC1, - 0xC1, 0xC6, 0xFE, 0xC3, 0xC3, 0xC3, 0xC1, 0x7C, 0xC6, 0x82, 0xC0, 0x70, - 0x1E, 0x02, 0x83, 0xC2, 0x7C, 0xFF, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, - 0x08, 0x08, 0x08, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xC3, - 0x7E, 0x41, 0xA0, 0x98, 0x44, 0x62, 0x21, 0x90, 0x58, 0x28, 0x1C, 0x06, - 0x00, 0xC2, 0x1A, 0x38, 0x91, 0x44, 0xCA, 0x26, 0x53, 0x14, 0x50, 0xA2, - 0x85, 0x14, 0x38, 0xE0, 0x82, 0x00, 0x41, 0x11, 0x8C, 0x82, 0x80, 0xC0, - 0xE0, 0x50, 0x44, 0x63, 0x20, 0xC0, 0xC1, 0xB0, 0x88, 0xC6, 0xC1, 0x40, - 0x60, 0x20, 0x10, 0x08, 0x04, 0x00, 0x7F, 0x03, 0x06, 0x04, 0x08, 0x18, - 0x30, 0x60, 0x40, 0xFF, 0xEA, 0xAA, 0xAA, 0xC0, 0x88, 0x04, 0x40, 0x22, - 0x01, 0xE4, 0x92, 0x49, 0x24, 0x9E, 0x23, 0x15, 0x29, 0x00, 0x00, 0x7E, - 0x44, 0xFA, 0x20, 0xBE, 0x8A, 0x2F, 0xC0, 0x82, 0x08, 0x3E, 0x8E, 0x18, - 0x61, 0x8F, 0xE0, 0x7C, 0x89, 0x06, 0x0C, 0x08, 0x9F, 0x00, 0x02, 0x04, - 0x0B, 0xD4, 0x78, 0x70, 0xE1, 0x46, 0xF4, 0x7A, 0x38, 0x7F, 0x82, 0x37, - 0x80, 0x34, 0x4F, 0x44, 0x44, 0x44, 0x7A, 0x8F, 0x1E, 0x1C, 0x68, 0xDE, - 0x83, 0x44, 0x70, 0x82, 0x08, 0x3E, 0x8E, 0x18, 0x61, 0x86, 0x10, 0x9F, - 0xC0, 0x41, 0x55, 0x55, 0xC0, 0x82, 0x08, 0x26, 0xB3, 0x8F, 0x24, 0x8A, - 0x30, 0xFF, 0xC0, 0xFF, 0xC6, 0x62, 0x31, 0x18, 0x8C, 0x46, 0x22, 0xFA, - 0x38, 0x61, 0x86, 0x18, 0x40, 0xFA, 0x38, 0x61, 0x86, 0x37, 0x80, 0xFA, - 0x38, 0x61, 0x86, 0x3F, 0xA0, 0x82, 0x00, 0x7E, 0x8F, 0x0E, 0x1C, 0x28, - 0xDE, 0x81, 0x02, 0x04, 0xFA, 0x49, 0x20, 0x7D, 0x14, 0x0E, 0x05, 0x17, - 0xC0, 0x4B, 0xA4, 0x92, 0x60, 0x8E, 0x38, 0xE3, 0x8E, 0x3F, 0x40, 0xC4, - 0x89, 0x33, 0x42, 0x86, 0x0C, 0x00, 0xCC, 0xD3, 0x24, 0xC9, 0x5E, 0x73, - 0x0C, 0xC3, 0x30, 0x44, 0xA3, 0x84, 0x29, 0xA4, 0x40, 0x44, 0x89, 0x31, - 0x42, 0x86, 0x04, 0x08, 0x20, 0xC0, 0x7C, 0x31, 0x8C, 0x21, 0x0F, 0xC0, - 0x69, 0x25, 0xA6, 0x49, 0x26, 0xFF, 0xF8, 0xC6, 0x66, 0x22, 0x12, 0x26, - 0x66, 0xC0, 0xE6, 0x70 -}; - -static const GFXglyph FreeSans7pt7bGlyphs[] = { - { 0, 6, 11, 6, 0, -10 } // ' ' - ,{ 9, 1, 10, 4, 2, -9 } // '!' - ,{ 11, 3, 4, 5, 1, -9 } // '"' - ,{ 13, 7, 10, 8, 0, -9 } // '#' - ,{ 22, 7, 13, 8, 0, -10 } // '$' - ,{ 34, 12, 10, 12, 0, -9 } // '%' - ,{ 49, 8, 10, 9, 1, -9 } // '&' - ,{ 59, 1, 4, 3, 1, -9 } // ''' - ,{ 60, 3, 13, 5, 1, -9 } // '(' - ,{ 65, 3, 13, 5, 1, -9 } // ')' - ,{ 70, 4, 4, 5, 1, -9 } // '*' - ,{ 72, 6, 7, 8, 1, -6 } // '+' - ,{ 78, 2, 3, 4, 1, 0 } // ',' - ,{ 79, 3, 1, 5, 1, -3 } // '-' - ,{ 80, 2, 1, 4, 1, 0 } // '.' - ,{ 81, 4, 10, 4, 0, -9 } // '/' - ,{ 86, 6, 10, 8, 1, -9 } // '0' - ,{ 94, 4, 10, 8, 1, -9 } // '1' - ,{ 99, 7, 10, 8, 0, -9 } // '2' - ,{ 108, 7, 10, 8, 0, -9 } // '3' - ,{ 118, 7, 10, 8, 0, -9 } // '4' - ,{ 127, 7, 10, 8, 0, -9 } // '5' - ,{ 136, 6, 10, 8, 1, -9 } // '6' - ,{ 144, 6, 10, 8, 1, -9 } // '7' - ,{ 152, 6, 10, 8, 1, -9 } // '8' - ,{ 160, 6, 10, 8, 1, -9 } // '9' - ,{ 168, 1, 7, 4, 2, -6 } // ':' - ,{ 169, 1, 9, 4, 2, -6 } // ';' - ,{ 171, 6, 7, 8, 1, -6 } // '<' - ,{ 177, 6, 3, 8, 1, -4 } // '=' - ,{ 180, 6, 7, 8, 1, -6 } // '>' - ,{ 186, 6, 10, 8, 1, -9 } // '?' - ,{ 194, 13, 12, 14, 0, -9 } // '@' - ,{ 214, 9, 10, 9, 0, -9 } // 'A' - ,{ 226, 8, 10, 9, 1, -9 } // 'B' - ,{ 236, 8, 10, 10, 1, -9 } // 'C' - ,{ 246, 8, 10, 10, 1, -9 } // 'D' - ,{ 256, 7, 10, 9, 1, -9 } // 'E' - ,{ 265, 7, 10, 8, 1, -9 } // 'F' - ,{ 274, 9, 10, 11, 1, -9 } // 'G' - ,{ 286, 8, 10, 10, 1, -9 } // 'H' - ,{ 296, 2, 10, 4, 1, -9 } // 'I' - ,{ 299, 6, 10, 7, 0, -9 } // 'J' - ,{ 307, 8, 10, 9, 1, -9 } // 'K' - ,{ 317, 6, 10, 8, 1, -9 } // 'L' - ,{ 325, 9, 10, 11, 1, -9 } // 'M' - ,{ 337, 8, 10, 10, 1, -9 } // 'N' - ,{ 347, 9, 10, 11, 1, -9 } // 'O' - ,{ 359, 7, 10, 9, 1, -9 } // 'P' - ,{ 368, 9, 11, 11, 1, -9 } // 'Q' - ,{ 381, 8, 10, 10, 1, -9 } // 'R' - ,{ 391, 8, 10, 9, 1, -9 } // 'S' - ,{ 401, 8, 10, 8, 0, -9 } // 'T' - ,{ 411, 8, 10, 10, 1, -9 } // 'U' - ,{ 421, 9, 10, 9, 0, -9 } // 'V' - ,{ 433, 13, 10, 13, 0, -9 } // 'W' - ,{ 450, 9, 10, 9, 0, -9 } // 'X' - ,{ 462, 9, 10, 9, 0, -9 } // 'Y' - ,{ 474, 8, 10, 8, 0, -9 } // 'Z' - ,{ 484, 2, 13, 4, 1, -9 } // '[' - ,{ 488, 4, 10, 4, 0, -9 } // '\' - ,{ 493, 3, 13, 4, 0, -9 } // ']' - ,{ 498, 5, 5, 6, 1, -9 } // '^' - ,{ 502, 8, 2, 8, 0, 2 } // '_' - ,{ 504, 3, 2, 5, 0, -9 } // '`' - ,{ 505, 6, 7, 8, 1, -6 } // 'a' - ,{ 511, 6, 10, 8, 1, -9 } // 'b' - ,{ 519, 7, 7, 7, 0, -6 } // 'c' - ,{ 526, 7, 10, 8, 0, -9 } // 'd' - ,{ 535, 6, 7, 8, 1, -6 } // 'e' - ,{ 541, 4, 10, 4, 0, -9 } // 'f' - ,{ 546, 7, 10, 8, 0, -6 } // 'g' - ,{ 555, 6, 10, 8, 1, -9 } // 'h' - ,{ 563, 1, 10, 3, 1, -9 } // 'i' - ,{ 565, 2, 13, 3, 0, -9 } // 'j' - ,{ 569, 6, 10, 7, 1, -9 } // 'k' - ,{ 577, 1, 10, 3, 1, -9 } // 'l' - ,{ 579, 9, 7, 11, 1, -6 } // 'm' - ,{ 587, 6, 7, 8, 1, -6 } // 'n' - ,{ 593, 6, 7, 8, 1, -6 } // 'o' - ,{ 599, 6, 10, 8, 1, -6 } // 'p' - ,{ 607, 7, 10, 8, 0, -6 } // 'q' - ,{ 616, 3, 7, 5, 1, -6 } // 'r' - ,{ 619, 6, 7, 7, 0, -6 } // 's' - ,{ 625, 3, 9, 4, 0, -8 } // 't' - ,{ 629, 6, 7, 8, 1, -6 } // 'u' - ,{ 635, 7, 7, 7, 0, -6 } // 'v' - ,{ 642, 10, 7, 10, 0, -6 } // 'w' - ,{ 651, 6, 7, 7, 0, -6 } // 'x' - ,{ 657, 7, 10, 7, 0, -6 } // 'y' - ,{ 666, 6, 7, 7, 0, -6 } // 'z' - ,{ 672, 3, 13, 5, 1, -9 } // '{' - ,{ 677, 1, 13, 4, 1, -9 } // '|' - ,{ 679, 4, 13, 5, 0, -9 } // '}' - ,{ 686, 6, 2, 8, 1, -5 } // '~' -}; - -static const GFXfont FreeSans7pt7b = { - (uint8_t *)FreeSans7pt7bBitmaps, - (GFXglyph *)FreeSans7pt7bGlyphs, 0x20, 0x7e, 15 }; - -static const uint8_t FreeSans32pt7bBitmaps[] = { - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x39, 0xCE, 0x73, 0x9C, 0x00, 0x00, - 0x1F, 0xFF, 0xFF, 0xFF, 0xFC, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, - 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0x7C, 0x1F, 0x7C, - 0x1F, 0x7C, 0x1F, 0x78, 0x1E, 0x78, 0x1E, 0x38, 0x0E, 0x38, 0x0E, 0x38, - 0x0E, 0x00, 0x0F, 0x80, 0x78, 0x00, 0x07, 0xC0, 0x7C, 0x00, 0x03, 0xC0, - 0x3E, 0x00, 0x03, 0xE0, 0x1F, 0x00, 0x01, 0xF0, 0x0F, 0x80, 0x00, 0xF8, - 0x07, 0xC0, 0x00, 0x7C, 0x03, 0xC0, 0x00, 0x3E, 0x03, 0xE0, 0x00, 0x1E, - 0x01, 0xF0, 0x00, 0x1F, 0x00, 0xF8, 0x00, 0x0F, 0x80, 0x7C, 0x00, 0x07, - 0xC0, 0x3C, 0x03, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, - 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x80, - 0x3E, 0x01, 0xE0, 0x00, 0x1F, 0x01, 0xF0, 0x00, 0x0F, 0x00, 0xF8, 0x00, - 0x0F, 0x80, 0x7C, 0x00, 0x07, 0xC0, 0x3E, 0x00, 0x03, 0xE0, 0x1E, 0x00, - 0x01, 0xF0, 0x1F, 0x00, 0x00, 0xF0, 0x0F, 0x80, 0x00, 0xF8, 0x07, 0xC0, - 0x00, 0x7C, 0x03, 0xE0, 0x00, 0x3E, 0x01, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, - 0xE7, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, - 0xFC, 0x03, 0xE0, 0x1F, 0x00, 0x01, 0xF0, 0x0F, 0x80, 0x00, 0xF8, 0x0F, - 0x80, 0x00, 0x78, 0x07, 0xC0, 0x00, 0x7C, 0x03, 0xE0, 0x00, 0x3E, 0x01, - 0xF0, 0x00, 0x1F, 0x00, 0xF8, 0x00, 0x0F, 0x80, 0x78, 0x00, 0x07, 0xC0, - 0x7C, 0x00, 0x03, 0xC0, 0x3E, 0x00, 0x03, 0xE0, 0x1F, 0x00, 0x01, 0xF0, - 0x0F, 0x80, 0x00, 0xF8, 0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, - 0x0F, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x03, - 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xE0, 0x07, 0xFF, - 0xFF, 0xE0, 0x0F, 0xFF, 0x9F, 0xE0, 0x3F, 0x8F, 0x0F, 0xC0, 0xFC, 0x1E, - 0x0F, 0xC1, 0xF0, 0x3C, 0x0F, 0x87, 0xE0, 0x78, 0x1F, 0x8F, 0x80, 0xF0, - 0x1F, 0x1F, 0x01, 0xE0, 0x3E, 0x3E, 0x03, 0xC0, 0x7C, 0x7C, 0x07, 0x80, - 0x00, 0xF8, 0x0F, 0x00, 0x01, 0xF0, 0x1E, 0x00, 0x03, 0xF0, 0x3C, 0x00, - 0x07, 0xF0, 0x78, 0x00, 0x07, 0xF0, 0xF0, 0x00, 0x0F, 0xF9, 0xE0, 0x00, - 0x0F, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xF8, 0x00, - 0x07, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x00, 0xFF, 0xFE, 0x00, - 0x00, 0xFF, 0xFE, 0x00, 0x01, 0xE3, 0xFE, 0x00, 0x03, 0xC1, 0xFE, 0x00, - 0x07, 0x81, 0xFC, 0x00, 0x0F, 0x01, 0xF8, 0x00, 0x1E, 0x01, 0xF0, 0x00, - 0x3C, 0x03, 0xFF, 0x80, 0x78, 0x07, 0xFF, 0x00, 0xF0, 0x0F, 0xFE, 0x01, - 0xE0, 0x1F, 0xFC, 0x03, 0xC0, 0x3E, 0xFC, 0x07, 0x80, 0x7C, 0xF8, 0x0F, - 0x00, 0xF9, 0xF8, 0x1E, 0x03, 0xF3, 0xF0, 0x3C, 0x0F, 0xC3, 0xF8, 0x78, - 0x3F, 0x83, 0xFC, 0xF1, 0xFE, 0x07, 0xFF, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, - 0xE0, 0x03, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x1E, 0x00, - 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xF0, 0x00, - 0x00, 0x01, 0xE0, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x07, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x01, - 0xE0, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x3C, 0x00, 0x01, 0xFF, 0xFE, 0x00, - 0x03, 0xC0, 0x00, 0x3F, 0x8F, 0xE0, 0x00, 0x78, 0x00, 0x07, 0xE0, 0x3F, - 0x00, 0x0F, 0x80, 0x00, 0x7C, 0x01, 0xF8, 0x00, 0xF0, 0x00, 0x0F, 0x80, - 0x0F, 0x80, 0x1F, 0x00, 0x00, 0xF8, 0x00, 0x78, 0x01, 0xE0, 0x00, 0x0F, - 0x00, 0x07, 0x80, 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x78, 0x03, 0xC0, 0x00, - 0x0F, 0x00, 0x07, 0x80, 0x78, 0x00, 0x00, 0xF0, 0x00, 0x78, 0x07, 0x80, - 0x00, 0x0F, 0x80, 0x0F, 0x80, 0xF0, 0x00, 0x00, 0x78, 0x00, 0xF8, 0x0F, - 0x00, 0x00, 0x07, 0xC0, 0x1F, 0x01, 0xE0, 0x00, 0x00, 0x3F, 0x07, 0xF0, - 0x1E, 0x00, 0x00, 0x03, 0xFF, 0xFE, 0x03, 0xC0, 0x00, 0x00, 0x1F, 0xFF, - 0xC0, 0x7C, 0x00, 0x00, 0x00, 0xFF, 0xF8, 0x07, 0x80, 0x00, 0x00, 0x03, - 0xFE, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x7F, - 0x80, 0x00, 0x00, 0x03, 0xC0, 0x1F, 0xFE, 0x00, 0x00, 0x00, 0x3C, 0x03, - 0xFF, 0xF8, 0x00, 0x00, 0x07, 0x80, 0x7F, 0xFF, 0xC0, 0x00, 0x00, 0x78, - 0x0F, 0xE1, 0xFC, 0x00, 0x00, 0x0F, 0x00, 0xF8, 0x07, 0xE0, 0x00, 0x01, - 0xF0, 0x1F, 0x00, 0x3E, 0x00, 0x00, 0x1E, 0x01, 0xF0, 0x01, 0xF0, 0x00, - 0x03, 0xE0, 0x1E, 0x00, 0x1F, 0x00, 0x00, 0x3C, 0x01, 0xE0, 0x00, 0xF0, - 0x00, 0x07, 0x80, 0x1E, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x01, 0xE0, 0x00, - 0xF0, 0x00, 0x0F, 0x00, 0x1E, 0x00, 0x1F, 0x00, 0x00, 0xF0, 0x01, 0xF0, - 0x01, 0xF0, 0x00, 0x1E, 0x00, 0x1F, 0x00, 0x3E, 0x00, 0x01, 0xE0, 0x00, - 0xFC, 0x07, 0xE0, 0x00, 0x3C, 0x00, 0x0F, 0xF1, 0xFC, 0x00, 0x03, 0xC0, - 0x00, 0x7F, 0xFF, 0x80, 0x00, 0x78, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x0F, - 0x80, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, - 0x03, 0xC0, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x1F, 0xFF, 0x80, - 0x00, 0x01, 0xFF, 0xFE, 0x00, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x00, 0xFC, - 0x0F, 0xC0, 0x00, 0x0F, 0xC0, 0x3F, 0x00, 0x00, 0x7C, 0x00, 0xF8, 0x00, - 0x07, 0xE0, 0x07, 0xC0, 0x00, 0x3F, 0x00, 0x3E, 0x00, 0x01, 0xF8, 0x01, - 0xF0, 0x00, 0x0F, 0xC0, 0x0F, 0x80, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0x01, - 0xF0, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x7E, 0x00, 0x00, 0x3F, 0x07, 0xF0, - 0x00, 0x00, 0xFC, 0x7F, 0x00, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0x00, 0x1F, - 0xFF, 0x00, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, - 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xFE, - 0x00, 0x00, 0x07, 0xF3, 0xF0, 0x0F, 0x80, 0x7F, 0x0F, 0xC0, 0x7C, 0x07, - 0xE0, 0x7F, 0x03, 0xE0, 0x7E, 0x01, 0xFC, 0x1F, 0x07, 0xE0, 0x07, 0xF1, - 0xF8, 0x3F, 0x00, 0x1F, 0xCF, 0x81, 0xF0, 0x00, 0x7E, 0x7C, 0x1F, 0x80, - 0x03, 0xFF, 0xE0, 0xFC, 0x00, 0x0F, 0xFE, 0x07, 0xE0, 0x00, 0x3F, 0xF0, - 0x3F, 0x00, 0x00, 0xFF, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x0F, 0xC0, 0x00, - 0x1F, 0xC0, 0x3F, 0x00, 0x01, 0xFF, 0x01, 0xF8, 0x00, 0x1F, 0xFC, 0x0F, - 0xE0, 0x01, 0xFF, 0xF0, 0x3F, 0xC0, 0x3F, 0xDF, 0x81, 0xFF, 0xDF, 0xFC, - 0xFE, 0x07, 0xFF, 0xFF, 0xC3, 0xF8, 0x1F, 0xFF, 0xF8, 0x0F, 0xE0, 0x3F, - 0xFF, 0x80, 0x3F, 0x80, 0x7F, 0xF0, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xF7, 0x9E, 0x79, 0xE7, 0x8C, 0x00, 0x38, 0x03, 0x80, - 0x3C, 0x03, 0xC0, 0x1E, 0x01, 0xE0, 0x0F, 0x00, 0xF0, 0x07, 0x80, 0x7C, - 0x03, 0xC0, 0x3E, 0x01, 0xE0, 0x0F, 0x00, 0xF8, 0x07, 0xC0, 0x3C, 0x03, - 0xE0, 0x1F, 0x00, 0xF8, 0x07, 0x80, 0x7C, 0x03, 0xE0, 0x1F, 0x00, 0xF8, - 0x07, 0xC0, 0x3E, 0x01, 0xF0, 0x0F, 0x80, 0x7C, 0x03, 0xE0, 0x1F, 0x00, - 0xF8, 0x07, 0xC0, 0x3E, 0x01, 0xF0, 0x0F, 0x80, 0x7C, 0x03, 0xE0, 0x0F, - 0x80, 0x7C, 0x03, 0xE0, 0x1F, 0x00, 0x78, 0x03, 0xE0, 0x1F, 0x00, 0x78, - 0x03, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xE0, 0x0F, 0x00, 0x7C, 0x01, 0xE0, - 0x07, 0x80, 0x3C, 0x00, 0xF0, 0x03, 0x80, 0x1E, 0x70, 0x01, 0xE0, 0x03, - 0xC0, 0x0F, 0x00, 0x1E, 0x00, 0x78, 0x00, 0xF0, 0x03, 0xC0, 0x07, 0x80, - 0x1E, 0x00, 0x7C, 0x00, 0xF0, 0x03, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x7C, - 0x01, 0xF0, 0x03, 0xC0, 0x0F, 0x80, 0x3E, 0x00, 0xF8, 0x03, 0xE0, 0x07, - 0x80, 0x1F, 0x00, 0x7C, 0x01, 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0x7C, 0x01, - 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0x7C, 0x01, 0xF0, 0x07, 0xC0, 0x1F, 0x00, - 0x7C, 0x03, 0xE0, 0x0F, 0x80, 0x3E, 0x00, 0xF8, 0x03, 0xC0, 0x1F, 0x00, - 0x7C, 0x01, 0xF0, 0x07, 0x80, 0x3E, 0x00, 0xF0, 0x03, 0xC0, 0x1F, 0x00, - 0x78, 0x03, 0xE0, 0x0F, 0x00, 0x3C, 0x01, 0xE0, 0x07, 0x80, 0x3C, 0x01, - 0xE0, 0x07, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x3C, 0x00, 0x07, 0x80, 0x00, - 0xF0, 0x00, 0x1E, 0x01, 0xC3, 0xC3, 0xBF, 0x7B, 0xF7, 0xFF, 0xFE, 0xFF, - 0xFF, 0xC3, 0xFF, 0xC0, 0x0F, 0xC0, 0x03, 0xFC, 0x00, 0x7F, 0xC0, 0x1E, - 0x78, 0x07, 0xC7, 0x81, 0xF0, 0xF8, 0x1C, 0x0E, 0x01, 0x80, 0x80, 0x00, - 0x07, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, - 0x3E, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x01, - 0xF0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x0F, - 0x80, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x7C, - 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x1F, 0x00, - 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xF8, 0x00, - 0x00, 0x01, 0xF0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x07, 0xC0, 0x00, - 0x00, 0x0F, 0x80, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, - 0x00, 0x7C, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xC7, - 0xBE, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x03, 0xC0, 0x00, 0xE0, - 0x00, 0x38, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x01, 0xC0, 0x00, 0xF0, 0x00, - 0x3C, 0x00, 0x0E, 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0x70, 0x00, 0x3C, - 0x00, 0x0F, 0x00, 0x03, 0x80, 0x00, 0xE0, 0x00, 0x78, 0x00, 0x1C, 0x00, - 0x07, 0x00, 0x03, 0xC0, 0x00, 0xE0, 0x00, 0x38, 0x00, 0x1E, 0x00, 0x07, - 0x00, 0x01, 0xC0, 0x00, 0xF0, 0x00, 0x3C, 0x00, 0x0E, 0x00, 0x07, 0x80, - 0x01, 0xE0, 0x00, 0x70, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x03, 0x80, 0x00, - 0xE0, 0x00, 0x78, 0x00, 0x1C, 0x00, 0x07, 0x00, 0x03, 0xC0, 0x00, 0xE0, - 0x00, 0x38, 0x00, 0x1E, 0x00, 0x07, 0x00, 0x01, 0xC0, 0x00, 0xF0, 0x00, - 0x3C, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x03, 0xFF, 0x80, - 0x00, 0x7F, 0xFF, 0x00, 0x07, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xF0, 0x07, - 0xFC, 0x7F, 0xC0, 0x7F, 0x00, 0xFE, 0x03, 0xF0, 0x03, 0xF8, 0x3F, 0x00, - 0x0F, 0xC1, 0xF8, 0x00, 0x3F, 0x1F, 0x80, 0x01, 0xF8, 0xFC, 0x00, 0x07, - 0xE7, 0xE0, 0x00, 0x3F, 0x3E, 0x00, 0x01, 0xFB, 0xF0, 0x00, 0x07, 0xDF, - 0x80, 0x00, 0x3E, 0xFC, 0x00, 0x01, 0xF7, 0xE0, 0x00, 0x0F, 0xFF, 0x00, - 0x00, 0x7F, 0xF0, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x1F, 0xFC, 0x00, 0x00, - 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x01, 0xFF, - 0xC0, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x03, 0xFF, 0xC0, - 0x00, 0x1F, 0xFE, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0x80, 0x00, - 0x3E, 0xFC, 0x00, 0x01, 0xF3, 0xE0, 0x00, 0x1F, 0x9F, 0x80, 0x00, 0xFC, - 0xFC, 0x00, 0x07, 0xC7, 0xE0, 0x00, 0x7E, 0x1F, 0x80, 0x03, 0xF0, 0xFC, - 0x00, 0x3F, 0x03, 0xF0, 0x01, 0xF8, 0x1F, 0xC0, 0x1F, 0x80, 0x7F, 0x83, - 0xFC, 0x01, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0x80, - 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x1F, 0x00, 0x1F, - 0x00, 0x1F, 0x00, 0x3F, 0x00, 0x7F, 0x00, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, - 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, - 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, - 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, - 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, - 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x00, - 0x00, 0x03, 0xC0, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xF0, 0x00, - 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xE0, 0x3F, 0xE0, 0xFF, 0xC1, 0xFE, - 0x00, 0x7F, 0x07, 0xF0, 0x00, 0xFE, 0x3F, 0x80, 0x01, 0xF8, 0xFC, 0x00, - 0x07, 0xF3, 0xF0, 0x00, 0x0F, 0xCF, 0x80, 0x00, 0x3F, 0x7E, 0x00, 0x00, - 0xFD, 0xF8, 0x00, 0x01, 0xF7, 0xE0, 0x00, 0x0F, 0xDF, 0x80, 0x00, 0x3F, - 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x80, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, - 0x03, 0xFE, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x1F, - 0xF8, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0xFF, 0xC0, - 0x00, 0x07, 0xFC, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x00, - 0x0F, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x07, 0xE0, - 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x03, 0xFF, 0xF0, - 0x00, 0x3F, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xC0, - 0x7F, 0xC1, 0xFF, 0x81, 0xFC, 0x00, 0xFE, 0x0F, 0xE0, 0x01, 0xFC, 0x3F, - 0x00, 0x03, 0xF0, 0xFC, 0x00, 0x0F, 0xC7, 0xE0, 0x00, 0x1F, 0x1F, 0x80, - 0x00, 0x7E, 0x7E, 0x00, 0x01, 0xF9, 0xF8, 0x00, 0x07, 0xE7, 0xE0, 0x00, - 0x1F, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x0F, 0xFF, 0x80, - 0x00, 0x3F, 0xF8, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xF0, 0x00, - 0x0D, 0xFF, 0xE0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x3F, 0x80, 0x00, - 0x00, 0x7E, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, - 0x0F, 0xC0, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x03, - 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x3F, 0x7C, 0x00, 0x00, 0xF9, - 0xF8, 0x00, 0x07, 0xE7, 0xF0, 0x00, 0x3F, 0x8F, 0xC0, 0x01, 0xFC, 0x3F, - 0xC0, 0x0F, 0xF0, 0x7F, 0xF7, 0xFF, 0x80, 0xFF, 0xFF, 0xFC, 0x01, 0xFF, - 0xFF, 0xE0, 0x03, 0xFF, 0xFE, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, 0x00, - 0x0F, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x01, - 0xF8, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x3F, - 0xC0, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x0F, 0xFE, - 0x00, 0x00, 0x1F, 0x7C, 0x00, 0x00, 0x7C, 0xF8, 0x00, 0x01, 0xF9, 0xF0, - 0x00, 0x03, 0xE3, 0xE0, 0x00, 0x0F, 0x87, 0xC0, 0x00, 0x3F, 0x0F, 0x80, - 0x00, 0xFC, 0x1F, 0x00, 0x01, 0xF0, 0x3E, 0x00, 0x07, 0xC0, 0x7C, 0x00, - 0x1F, 0x80, 0xF8, 0x00, 0x7E, 0x01, 0xF0, 0x00, 0xF8, 0x03, 0xE0, 0x03, - 0xF0, 0x07, 0xC0, 0x0F, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x1F, 0x00, 0x7C, - 0x00, 0x3E, 0x01, 0xF8, 0x00, 0x7C, 0x07, 0xE0, 0x00, 0xF8, 0x0F, 0x80, - 0x01, 0xF0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, - 0x7C, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x03, - 0xE0, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x1F, - 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xF8, - 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, - 0xF0, 0x1F, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFC, - 0x0F, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0xC0, 0xF8, 0x00, 0x00, 0x03, - 0xE0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0xF8, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x7C, 0x00, - 0x00, 0x01, 0xF0, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x1F, 0x1F, 0xF8, - 0x00, 0x7D, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xF0, - 0x3F, 0xFF, 0xFF, 0xE0, 0xFF, 0x00, 0x7F, 0xC3, 0xF8, 0x00, 0x7F, 0x0F, - 0xC0, 0x00, 0xFE, 0x3E, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x07, 0xF0, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0x01, 0xF0, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, - 0x7C, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x3F, - 0x7E, 0x00, 0x00, 0xF9, 0xF8, 0x00, 0x07, 0xE7, 0xF0, 0x00, 0x3F, 0x8F, - 0xE0, 0x01, 0xFC, 0x3F, 0xC0, 0x0F, 0xE0, 0x7F, 0xFF, 0xFF, 0x00, 0xFF, - 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFE, 0x00, 0x01, 0xFF, - 0xE0, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, - 0x80, 0x03, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xF8, 0x03, 0xFC, 0x3F, 0xE0, - 0x3F, 0x80, 0x3F, 0x83, 0xF8, 0x00, 0xFC, 0x1F, 0x80, 0x07, 0xE1, 0xF8, - 0x00, 0x1F, 0x8F, 0xC0, 0x00, 0xFC, 0xFC, 0x00, 0x03, 0xE7, 0xE0, 0x00, - 0x00, 0x3E, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x07, 0xE0, 0x3F, 0x00, 0x3F, 0x0F, 0xFF, 0x01, 0xF1, - 0xFF, 0xFC, 0x0F, 0x9F, 0xFF, 0xF8, 0x7D, 0xFF, 0xFF, 0xE3, 0xFF, 0xC0, - 0xFF, 0x9F, 0xF8, 0x01, 0xFC, 0xFF, 0x80, 0x07, 0xF7, 0xF8, 0x00, 0x1F, - 0xBF, 0x80, 0x00, 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x1F, 0xFE, - 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x1F, 0xFC, 0x00, - 0x00, 0xFF, 0xE0, 0x00, 0x07, 0xDF, 0x00, 0x00, 0x7E, 0xF8, 0x00, 0x03, - 0xF7, 0xE0, 0x00, 0x1F, 0x9F, 0x00, 0x01, 0xF8, 0xFC, 0x00, 0x1F, 0xC3, - 0xF0, 0x01, 0xFC, 0x1F, 0xE0, 0x1F, 0xE0, 0x7F, 0xEF, 0xFE, 0x01, 0xFF, - 0xFF, 0xE0, 0x07, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xC0, 0x00, 0x3F, 0xF8, - 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, - 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x03, 0xE0, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, - 0x0F, 0x80, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x0F, - 0x80, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x0F, 0x80, - 0x00, 0x00, 0x7C, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x0F, 0x80, 0x00, - 0x00, 0x3E, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, - 0x3E, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x1F, - 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x0F, 0x80, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x07, 0xC0, 0x00, - 0x00, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, - 0x1F, 0x80, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x07, - 0xC0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x03, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x01, 0xFF, - 0xE0, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, - 0xC0, 0x3F, 0xF1, 0xFF, 0x81, 0xFE, 0x00, 0xFE, 0x07, 0xE0, 0x01, 0xFC, - 0x3F, 0x80, 0x03, 0xF0, 0xFC, 0x00, 0x07, 0xC3, 0xF0, 0x00, 0x1F, 0x8F, - 0xC0, 0x00, 0x7E, 0x3F, 0x00, 0x01, 0xF8, 0xFC, 0x00, 0x07, 0xE3, 0xF0, - 0x00, 0x1F, 0x8F, 0xC0, 0x00, 0xFC, 0x1F, 0x80, 0x03, 0xF0, 0x7F, 0x00, - 0x1F, 0x80, 0xFE, 0x01, 0xFE, 0x01, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, - 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xF0, - 0x0F, 0xF0, 0x1F, 0xE0, 0x7F, 0x00, 0x1F, 0xC3, 0xF0, 0x00, 0x3F, 0x9F, - 0xC0, 0x00, 0x7E, 0x7E, 0x00, 0x00, 0xFD, 0xF8, 0x00, 0x03, 0xFF, 0xC0, - 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x7F, 0xF0, 0x00, - 0x01, 0xFF, 0xC0, 0x00, 0x0F, 0xDF, 0x00, 0x00, 0x3F, 0x7E, 0x00, 0x00, - 0xFD, 0xF8, 0x00, 0x07, 0xF3, 0xF0, 0x00, 0x1F, 0x8F, 0xE0, 0x00, 0xFE, - 0x1F, 0xE0, 0x0F, 0xF0, 0x7F, 0xFB, 0xFF, 0x80, 0xFF, 0xFF, 0xFC, 0x00, - 0xFF, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, - 0x07, 0x80, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0xFF, - 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0x80, 0x3F, 0xE1, 0xFF, 0x01, 0xFC, 0x00, - 0xFE, 0x0F, 0xE0, 0x01, 0xF8, 0x3F, 0x00, 0x03, 0xF1, 0xF8, 0x00, 0x0F, - 0xC7, 0xE0, 0x00, 0x1F, 0x9F, 0x80, 0x00, 0x7E, 0x7C, 0x00, 0x00, 0xFB, - 0xF0, 0x00, 0x03, 0xEF, 0xC0, 0x00, 0x0F, 0xBF, 0x00, 0x00, 0x3F, 0xFC, - 0x00, 0x00, 0xFD, 0xF0, 0x00, 0x03, 0xF7, 0xC0, 0x00, 0x0F, 0xDF, 0x80, - 0x00, 0x7F, 0x7E, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x0F, 0xF3, 0xF8, 0x00, - 0x7F, 0xC7, 0xF0, 0x07, 0xFF, 0x1F, 0xF8, 0x7F, 0xFC, 0x3F, 0xFF, 0xFF, - 0xF0, 0x7F, 0xFF, 0xCF, 0xC0, 0x7F, 0xFE, 0x3F, 0x00, 0xFF, 0xE0, 0xFC, - 0x00, 0x18, 0x03, 0xF0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x3E, 0x00, - 0x00, 0x01, 0xF8, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x1F, 0x1F, 0x80, - 0x00, 0x7C, 0x3E, 0x00, 0x03, 0xF0, 0xFC, 0x00, 0x1F, 0x83, 0xF0, 0x00, - 0x7E, 0x07, 0xE0, 0x03, 0xF0, 0x1F, 0xC0, 0x3F, 0xC0, 0x3F, 0xF7, 0xFE, - 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xF8, 0x00, - 0x01, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x1C, 0x38, - 0x60, 0xC3, 0x87, 0x1C, 0xF9, 0xC0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x3C, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, - 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x3F, 0xF8, 0x00, 0x03, 0xFF, - 0xC0, 0x00, 0x1F, 0xFC, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x0F, 0xFE, 0x00, - 0x00, 0x7F, 0xF0, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x1F, 0xF8, 0x00, 0x00, - 0x3F, 0xC0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x01, - 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, - 0x1F, 0xFC, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0x80, 0x00, - 0x01, 0xFF, 0xE0, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xF8, 0x00, - 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x03, 0xE0, 0x00, - 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x80, 0x00, 0x00, 0x01, 0xC0, 0x00, - 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x0F, 0xFC, 0x00, - 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0xE0, - 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x1F, 0xFE, - 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x01, 0xFF, - 0xC0, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x03, 0xFE, - 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x0F, 0xFE, 0x00, - 0x00, 0x7F, 0xF0, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x3F, 0xF8, 0x00, 0x03, - 0xFF, 0xC0, 0x00, 0x1F, 0xFC, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x03, 0xFF, - 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x1C, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x3F, - 0xFE, 0x00, 0x1F, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xF0, - 0x7F, 0xC1, 0xFF, 0x0F, 0xC0, 0x0F, 0xF3, 0xF0, 0x00, 0xFE, 0x7E, 0x00, - 0x0F, 0xFF, 0x80, 0x00, 0xFF, 0xF0, 0x00, 0x1F, 0xFE, 0x00, 0x03, 0xFF, - 0x80, 0x00, 0x7F, 0xF0, 0x00, 0x0F, 0xFE, 0x00, 0x01, 0xF8, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0x1F, 0xC0, 0x00, 0x07, 0xF0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x7F, - 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x07, 0xF0, 0x00, 0x01, 0xFC, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x1F, 0x80, 0x00, - 0x03, 0xF0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, - 0xFF, 0xE0, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, - 0xFF, 0xF8, 0x0F, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x3F, 0xF8, - 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x3F, 0xC0, 0x00, - 0x00, 0x1F, 0xE0, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x0F, - 0xE0, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x0F, - 0xF0, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x00, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0x80, 0x7E, 0x00, 0x00, 0xF8, 0x00, 0x07, 0xF0, 0x3F, - 0x00, 0x01, 0xFF, 0x83, 0xE0, 0xFC, 0x0F, 0xC0, 0x01, 0xFF, 0xF8, 0xF8, - 0x3F, 0x87, 0xE0, 0x00, 0xFF, 0xFE, 0x7C, 0x07, 0xE1, 0xF0, 0x00, 0xFF, - 0x0F, 0xDF, 0x01, 0xF8, 0xFC, 0x00, 0x7F, 0x00, 0xF7, 0xC0, 0x3E, 0x3E, - 0x00, 0x1F, 0x80, 0x1F, 0xF0, 0x0F, 0xCF, 0x80, 0x0F, 0xC0, 0x03, 0xF8, - 0x03, 0xF7, 0xE0, 0x07, 0xE0, 0x00, 0xFE, 0x00, 0xFD, 0xF0, 0x01, 0xF8, - 0x00, 0x3F, 0x80, 0x3F, 0x7C, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x0F, 0xDF, - 0x00, 0x3E, 0x00, 0x03, 0xF0, 0x03, 0xFF, 0xC0, 0x1F, 0x80, 0x00, 0xFC, - 0x00, 0xFF, 0xF0, 0x07, 0xE0, 0x00, 0x3E, 0x00, 0x3F, 0xFC, 0x01, 0xF8, - 0x00, 0x0F, 0x80, 0x0F, 0xBF, 0x00, 0x7C, 0x00, 0x07, 0xE0, 0x03, 0xEF, - 0xC0, 0x1F, 0x00, 0x01, 0xF0, 0x01, 0xFB, 0xF0, 0x07, 0xC0, 0x00, 0x7C, - 0x00, 0x7C, 0xFC, 0x01, 0xF0, 0x00, 0x3F, 0x00, 0x3F, 0x3F, 0x00, 0x7C, - 0x00, 0x0F, 0x80, 0x0F, 0x8F, 0xC0, 0x1F, 0x80, 0x07, 0xE0, 0x07, 0xE1, - 0xF0, 0x07, 0xE0, 0x03, 0xF8, 0x03, 0xF0, 0x7E, 0x01, 0xFC, 0x00, 0xFE, - 0x01, 0xFC, 0x1F, 0x80, 0x3F, 0x80, 0x7F, 0x80, 0xFE, 0x07, 0xE0, 0x07, - 0xF0, 0x7F, 0xF0, 0xFF, 0x00, 0xFC, 0x01, 0xFF, 0xFE, 0xFF, 0xFF, 0x80, - 0x3F, 0x00, 0x3F, 0xFF, 0x3F, 0xFF, 0xC0, 0x07, 0xE0, 0x07, 0xFF, 0x07, - 0xFF, 0xC0, 0x01, 0xFC, 0x00, 0x7F, 0x00, 0xFF, 0xC0, 0x00, 0x3F, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x20, 0x00, - 0x00, 0x01, 0xFF, 0xE0, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, - 0xFF, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, - 0x3F, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, - 0x01, 0xFF, 0x80, 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x03, 0xFF, - 0xC0, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x03, 0xF7, 0xE0, 0x00, - 0x00, 0x07, 0xE7, 0xE0, 0x00, 0x00, 0x07, 0xE7, 0xE0, 0x00, 0x00, 0x07, - 0xE3, 0xF0, 0x00, 0x00, 0x0F, 0xC3, 0xF0, 0x00, 0x00, 0x0F, 0xC3, 0xF0, - 0x00, 0x00, 0x0F, 0xC1, 0xF8, 0x00, 0x00, 0x1F, 0x81, 0xF8, 0x00, 0x00, - 0x1F, 0x81, 0xF8, 0x00, 0x00, 0x1F, 0x80, 0xFC, 0x00, 0x00, 0x3F, 0x00, - 0xFC, 0x00, 0x00, 0x3F, 0x00, 0xFC, 0x00, 0x00, 0x3E, 0x00, 0x7E, 0x00, - 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x7F, 0x00, 0x00, 0xFC, - 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x3F, - 0x80, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x01, - 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, - 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0xFF, 0xE0, - 0x07, 0xE0, 0x00, 0x07, 0xE0, 0x07, 0xE0, 0x00, 0x07, 0xF0, 0x0F, 0xC0, - 0x00, 0x03, 0xF0, 0x0F, 0xC0, 0x00, 0x03, 0xF0, 0x1F, 0xC0, 0x00, 0x03, - 0xF8, 0x1F, 0x80, 0x00, 0x01, 0xF8, 0x1F, 0x80, 0x00, 0x01, 0xF8, 0x3F, - 0x80, 0x00, 0x01, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, - 0x00, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x7E, 0x00, 0x00, 0x00, 0x7E, - 0x7E, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, - 0xFE, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, - 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0xFC, 0x3F, 0x00, 0x07, 0xFF, 0x0F, - 0xC0, 0x00, 0x1F, 0xE3, 0xF0, 0x00, 0x01, 0xF8, 0xFC, 0x00, 0x00, 0x7F, - 0x3F, 0x00, 0x00, 0x0F, 0xCF, 0xC0, 0x00, 0x03, 0xF3, 0xF0, 0x00, 0x00, - 0xFC, 0xFC, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x0F, 0xCF, 0xC0, 0x00, - 0x03, 0xF3, 0xF0, 0x00, 0x00, 0xFC, 0xFC, 0x00, 0x00, 0x7E, 0x3F, 0x00, - 0x00, 0x1F, 0x8F, 0xC0, 0x00, 0x1F, 0xC3, 0xF0, 0x00, 0x3F, 0xE0, 0xFF, - 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0x03, - 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, 0x00, 0x00, 0x7F, - 0xCF, 0xC0, 0x00, 0x07, 0xFB, 0xF0, 0x00, 0x00, 0xFE, 0xFC, 0x00, 0x00, - 0x1F, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xF0, 0x00, - 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0xC0, - 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x0F, 0xFF, - 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x03, 0xFB, 0xF0, 0x00, 0x01, 0xFE, - 0xFC, 0x00, 0x01, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, - 0xC3, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, - 0xE0, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xF0, 0x00, - 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0x00, 0x00, 0xFF, - 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xF7, 0xFF, 0xC0, 0x03, 0xFE, 0x00, 0x3F, - 0xE0, 0x07, 0xF8, 0x00, 0x0F, 0xF0, 0x0F, 0xF0, 0x00, 0x07, 0xF0, 0x0F, - 0xE0, 0x00, 0x03, 0xF8, 0x1F, 0xC0, 0x00, 0x01, 0xF8, 0x1F, 0x80, 0x00, - 0x01, 0xFC, 0x3F, 0x80, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0xFC, - 0x3F, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, - 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, - 0x3F, 0x7E, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x00, 0x00, 0x00, 0x7E, 0x7E, - 0x00, 0x00, 0x00, 0x7E, 0x3F, 0x00, 0x00, 0x00, 0x7E, 0x3F, 0x00, 0x00, - 0x00, 0xFE, 0x3F, 0x80, 0x00, 0x00, 0xFC, 0x1F, 0x80, 0x00, 0x01, 0xFC, - 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x0F, 0xE0, 0x00, 0x03, 0xF8, 0x0F, 0xF0, - 0x00, 0x07, 0xF8, 0x07, 0xFC, 0x00, 0x0F, 0xF0, 0x03, 0xFF, 0x00, 0x3F, - 0xE0, 0x01, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x00, - 0x3F, 0xFF, 0xFF, 0x00, 0x00, 0x1F, 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xFF, - 0xF0, 0x00, 0xFF, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, - 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xF8, - 0x0F, 0x80, 0x01, 0xFF, 0xC0, 0xF8, 0x00, 0x01, 0xFE, 0x0F, 0x80, 0x00, - 0x0F, 0xF0, 0xF8, 0x00, 0x00, 0x7F, 0x8F, 0x80, 0x00, 0x03, 0xF8, 0xF8, - 0x00, 0x00, 0x1F, 0xCF, 0x80, 0x00, 0x00, 0xFC, 0xF8, 0x00, 0x00, 0x0F, - 0xCF, 0x80, 0x00, 0x00, 0x7E, 0xF8, 0x00, 0x00, 0x07, 0xEF, 0x80, 0x00, - 0x00, 0x7E, 0xF8, 0x00, 0x00, 0x03, 0xEF, 0x80, 0x00, 0x00, 0x3F, 0xF8, - 0x00, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x03, - 0xFF, 0x80, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0x80, 0x00, - 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x00, 0x3F, 0xF8, - 0x00, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x03, - 0xFF, 0x80, 0x00, 0x00, 0x3E, 0xF8, 0x00, 0x00, 0x07, 0xEF, 0x80, 0x00, - 0x00, 0x7E, 0xF8, 0x00, 0x00, 0x07, 0xEF, 0x80, 0x00, 0x00, 0xFC, 0xF8, - 0x00, 0x00, 0x0F, 0xCF, 0x80, 0x00, 0x01, 0xFC, 0xF8, 0x00, 0x00, 0x3F, - 0x8F, 0x80, 0x00, 0x03, 0xF8, 0xF8, 0x00, 0x00, 0xFF, 0x0F, 0x80, 0x00, - 0x1F, 0xE0, 0xF8, 0x00, 0x0F, 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, - 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0x80, - 0x0F, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, - 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, - 0xFF, 0xE7, 0xE0, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x07, 0xE0, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x1F, - 0x80, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xF3, - 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFE, - 0x7E, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, - 0x0F, 0xC0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, - 0x00, 0x3F, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x0F, 0xC0, 0x00, - 0x00, 0x07, 0xE0, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0x03, 0xF0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x0F, 0xC0, - 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, - 0xFF, 0x8F, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, - 0xE3, 0xF0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x0F, 0xC0, - 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x03, 0xF0, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0x03, 0xF0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, - 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF0, 0x00, - 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, - 0xFF, 0xFF, 0xFC, 0x00, 0x3F, 0xF0, 0x00, 0xFF, 0x80, 0x1F, 0xF0, 0x00, - 0x0F, 0xF0, 0x07, 0xF0, 0x00, 0x01, 0xFE, 0x03, 0xF8, 0x00, 0x00, 0x3F, - 0x81, 0xFC, 0x00, 0x00, 0x07, 0xF0, 0x7E, 0x00, 0x00, 0x00, 0xFC, 0x3F, - 0x80, 0x00, 0x00, 0x3F, 0x0F, 0xC0, 0x00, 0x00, 0x07, 0xE7, 0xF0, 0x00, - 0x00, 0x01, 0xF9, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x03, - 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x07, - 0xFF, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, - 0xFF, 0xC0, 0x00, 0x1F, 0xFF, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xFF, 0xFC, - 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, - 0x00, 0x00, 0xFD, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0x7E, 0x00, 0x00, 0x00, - 0x0F, 0xDF, 0x80, 0x00, 0x00, 0x03, 0xF7, 0xF0, 0x00, 0x00, 0x00, 0xFC, - 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0x00, 0x1F, 0xC7, 0xF0, - 0x00, 0x00, 0x0F, 0xF1, 0xFC, 0x00, 0x00, 0x07, 0xFC, 0x3F, 0x80, 0x00, - 0x03, 0xFF, 0x07, 0xF8, 0x00, 0x01, 0xFF, 0xC1, 0xFF, 0x00, 0x00, 0xFD, - 0xF0, 0x3F, 0xF8, 0x01, 0xFE, 0x7C, 0x07, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, - 0xFF, 0xFF, 0xFF, 0x87, 0xC0, 0x0F, 0xFF, 0xFF, 0x80, 0xF0, 0x00, 0xFF, - 0xFF, 0xC0, 0x3C, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0xFC, 0x00, 0x00, 0x03, - 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, - 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, - 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, - 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, - 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, - 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, - 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, - 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, - 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, - 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, - 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, - 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, - 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, - 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, - 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, - 0x0F, 0xC0, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x3F, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x3F, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x03, 0xF0, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x03, 0xF0, 0x00, - 0x00, 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x03, 0xF0, - 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x3F, 0xFC, 0x00, 0x0F, 0xFF, 0x00, 0x03, - 0xFF, 0xC0, 0x00, 0xFF, 0xF0, 0x00, 0x3F, 0xFC, 0x00, 0x0F, 0xFF, 0x00, - 0x07, 0xFF, 0xE0, 0x01, 0xF9, 0xF8, 0x00, 0x7E, 0x7F, 0x00, 0x3F, 0x9F, - 0xE0, 0x1F, 0xC3, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xF8, 0x0F, 0xFF, 0xFC, - 0x01, 0xFF, 0xFC, 0x00, 0x1F, 0xFC, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xFF, - 0xC0, 0x00, 0x01, 0xFE, 0xFC, 0x00, 0x00, 0x3F, 0xCF, 0xC0, 0x00, 0x07, - 0xF8, 0xFC, 0x00, 0x00, 0xFF, 0x0F, 0xC0, 0x00, 0x1F, 0xE0, 0xFC, 0x00, - 0x03, 0xFC, 0x0F, 0xC0, 0x00, 0x7F, 0x80, 0xFC, 0x00, 0x0F, 0xF0, 0x0F, - 0xC0, 0x01, 0xFE, 0x00, 0xFC, 0x00, 0x3F, 0xC0, 0x0F, 0xC0, 0x07, 0xF8, - 0x00, 0xFC, 0x00, 0xFF, 0x00, 0x0F, 0xC0, 0x1F, 0xE0, 0x00, 0xFC, 0x03, - 0xFC, 0x00, 0x0F, 0xC0, 0x3F, 0x80, 0x00, 0xFC, 0x07, 0xF0, 0x00, 0x0F, - 0xC0, 0xFE, 0x00, 0x00, 0xFC, 0x1F, 0xC0, 0x00, 0x0F, 0xC3, 0xFC, 0x00, - 0x00, 0xFC, 0x7F, 0xE0, 0x00, 0x0F, 0xCF, 0xFE, 0x00, 0x00, 0xFD, 0xFF, - 0xF0, 0x00, 0x0F, 0xFF, 0x3F, 0x80, 0x00, 0xFF, 0xE1, 0xFC, 0x00, 0x0F, - 0xFC, 0x1F, 0xC0, 0x00, 0xFF, 0x80, 0xFE, 0x00, 0x0F, 0xF0, 0x07, 0xF0, - 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x0F, 0xC0, 0x03, 0xF8, 0x00, 0xFC, 0x00, - 0x1F, 0xC0, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0x0F, 0xE0, 0x0F, - 0xC0, 0x00, 0x7F, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x0F, 0xC0, 0x00, 0x3F, - 0x80, 0xFC, 0x00, 0x01, 0xFC, 0x0F, 0xC0, 0x00, 0x0F, 0xE0, 0xFC, 0x00, - 0x00, 0xFE, 0x0F, 0xC0, 0x00, 0x07, 0xF0, 0xFC, 0x00, 0x00, 0x3F, 0x8F, - 0xC0, 0x00, 0x03, 0xF8, 0xFC, 0x00, 0x00, 0x1F, 0xCF, 0xC0, 0x00, 0x00, - 0xFE, 0xFC, 0x00, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0x00, 0x7F, 0xFC, 0x00, - 0x00, 0x07, 0xE0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, - 0x0F, 0xC0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, - 0x80, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x01, 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x7E, 0x00, 0x00, - 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x0F, 0xC0, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, - 0x00, 0xFC, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x01, - 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x03, 0xF0, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x07, 0xE0, 0x00, - 0x00, 0x3F, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0x7E, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0x00, 0x00, - 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, - 0xFF, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0xFF, 0xFE, - 0x00, 0x00, 0x07, 0xFF, 0xFB, 0xE0, 0x00, 0x00, 0xFF, 0xFF, 0x7C, 0x00, - 0x00, 0x1F, 0xFF, 0xEF, 0x80, 0x00, 0x07, 0xDF, 0xFC, 0xF8, 0x00, 0x00, - 0xFB, 0xFF, 0x9F, 0x00, 0x00, 0x1F, 0x7F, 0xF3, 0xE0, 0x00, 0x07, 0xCF, - 0xFE, 0x3E, 0x00, 0x00, 0xF9, 0xFF, 0xC7, 0xC0, 0x00, 0x1F, 0x3F, 0xF8, - 0xF8, 0x00, 0x07, 0xC7, 0xFF, 0x0F, 0x80, 0x00, 0xF8, 0xFF, 0xE1, 0xF0, - 0x00, 0x1F, 0x1F, 0xFC, 0x3E, 0x00, 0x07, 0xC3, 0xFF, 0x83, 0xE0, 0x00, - 0xF8, 0x7F, 0xF0, 0x7C, 0x00, 0x1F, 0x0F, 0xFE, 0x0F, 0x80, 0x07, 0xC1, - 0xFF, 0xC0, 0xF8, 0x00, 0xF8, 0x3F, 0xF8, 0x1F, 0x00, 0x1F, 0x07, 0xFF, - 0x03, 0xE0, 0x07, 0xC0, 0xFF, 0xE0, 0x3E, 0x00, 0xF8, 0x1F, 0xFC, 0x07, - 0xC0, 0x1F, 0x03, 0xFF, 0x80, 0xFC, 0x07, 0xC0, 0x7F, 0xF0, 0x0F, 0x80, - 0xF8, 0x0F, 0xFE, 0x01, 0xF0, 0x1F, 0x01, 0xFF, 0xC0, 0x3F, 0x07, 0xC0, - 0x3F, 0xF8, 0x03, 0xE0, 0xF8, 0x07, 0xFF, 0x00, 0x7C, 0x1F, 0x00, 0xFF, - 0xE0, 0x0F, 0xC7, 0xC0, 0x1F, 0xFC, 0x00, 0xF8, 0xF8, 0x03, 0xFF, 0x80, - 0x1F, 0x1F, 0x00, 0x7F, 0xF0, 0x03, 0xF7, 0xC0, 0x0F, 0xFE, 0x00, 0x3E, - 0xF8, 0x01, 0xFF, 0xC0, 0x07, 0xDF, 0x00, 0x3F, 0xF8, 0x00, 0xFF, 0xC0, - 0x07, 0xFF, 0x00, 0x0F, 0xF8, 0x00, 0xFF, 0xE0, 0x01, 0xFF, 0x00, 0x1F, - 0xFC, 0x00, 0x3F, 0xC0, 0x03, 0xFF, 0x80, 0x03, 0xF8, 0x00, 0x7F, 0xF0, - 0x00, 0x7F, 0x00, 0x0F, 0xC0, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, - 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xFF, - 0x80, 0x00, 0x03, 0xFF, 0xFC, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x03, - 0xFF, 0xFE, 0x00, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xBF, 0x00, - 0x00, 0x3F, 0xFB, 0xF8, 0x00, 0x03, 0xFF, 0x9F, 0x80, 0x00, 0x3F, 0xF8, - 0xFC, 0x00, 0x03, 0xFF, 0x8F, 0xE0, 0x00, 0x3F, 0xF8, 0x7E, 0x00, 0x03, - 0xFF, 0x83, 0xF0, 0x00, 0x3F, 0xF8, 0x3F, 0x80, 0x03, 0xFF, 0x81, 0xF8, - 0x00, 0x3F, 0xF8, 0x0F, 0xC0, 0x03, 0xFF, 0x80, 0xFE, 0x00, 0x3F, 0xF8, - 0x07, 0xE0, 0x03, 0xFF, 0x80, 0x7F, 0x00, 0x3F, 0xF8, 0x03, 0xF0, 0x03, - 0xFF, 0x80, 0x1F, 0x80, 0x3F, 0xF8, 0x01, 0xFC, 0x03, 0xFF, 0x80, 0x0F, - 0xC0, 0x3F, 0xF8, 0x00, 0x7E, 0x03, 0xFF, 0x80, 0x07, 0xF0, 0x3F, 0xF8, - 0x00, 0x3F, 0x03, 0xFF, 0x80, 0x01, 0xF8, 0x3F, 0xF8, 0x00, 0x1F, 0xC3, - 0xFF, 0x80, 0x00, 0xFC, 0x3F, 0xF8, 0x00, 0x0F, 0xE3, 0xFF, 0x80, 0x00, - 0x7F, 0x3F, 0xF8, 0x00, 0x03, 0xF3, 0xFF, 0x80, 0x00, 0x3F, 0xBF, 0xF8, - 0x00, 0x01, 0xFB, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x00, 0xFF, - 0xFF, 0x80, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0x80, 0x00, - 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0xF8, - 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0x80, - 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xE0, - 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0x80, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0x00, - 0x00, 0x7F, 0xFE, 0xFF, 0xFC, 0x00, 0x07, 0xFE, 0x00, 0x3F, 0xF0, 0x00, - 0x7F, 0xC0, 0x00, 0x3F, 0xC0, 0x07, 0xF8, 0x00, 0x00, 0xFF, 0x00, 0x7F, - 0x80, 0x00, 0x03, 0xFC, 0x03, 0xF8, 0x00, 0x00, 0x0F, 0xE0, 0x3F, 0x80, - 0x00, 0x00, 0x3F, 0x81, 0xF8, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0xC0, 0x00, - 0x00, 0x07, 0xF0, 0xFC, 0x00, 0x00, 0x00, 0x1F, 0x87, 0xE0, 0x00, 0x00, - 0x00, 0xFC, 0x7E, 0x00, 0x00, 0x00, 0x03, 0xF3, 0xF0, 0x00, 0x00, 0x00, - 0x1F, 0x9F, 0x80, 0x00, 0x00, 0x00, 0xFC, 0xFC, 0x00, 0x00, 0x00, 0x07, - 0xE7, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0x7E, 0x00, 0x00, 0x00, 0x00, 0xFF, - 0xF0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x3F, 0xFC, - 0x00, 0x00, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x00, - 0x00, 0x00, 0x00, 0x7E, 0xF8, 0x00, 0x00, 0x00, 0x03, 0xF7, 0xE0, 0x00, - 0x00, 0x00, 0x1F, 0xBF, 0x00, 0x00, 0x00, 0x01, 0xF9, 0xF8, 0x00, 0x00, - 0x00, 0x0F, 0xCF, 0xC0, 0x00, 0x00, 0x00, 0x7E, 0x7F, 0x00, 0x00, 0x00, - 0x03, 0xF1, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0x0F, 0xC0, 0x00, 0x00, 0x01, - 0xF8, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC1, 0xFC, 0x00, 0x00, 0x00, 0xFC, - 0x0F, 0xE0, 0x00, 0x00, 0x0F, 0xE0, 0x3F, 0x80, 0x00, 0x00, 0xFE, 0x00, - 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x07, 0xF8, 0x00, 0x00, 0xFF, 0x00, 0x1F, - 0xF0, 0x00, 0x1F, 0xF0, 0x00, 0x7F, 0xE0, 0x03, 0xFF, 0x00, 0x01, 0xFF, - 0xFF, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x0F, 0xFF, - 0xFF, 0xE0, 0x00, 0x00, 0x1F, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x1F, 0xFF, - 0x80, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, - 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xC7, 0xE0, - 0x00, 0x7F, 0xF3, 0xF0, 0x00, 0x07, 0xF9, 0xF8, 0x00, 0x00, 0xFE, 0xFC, - 0x00, 0x00, 0x7F, 0x7E, 0x00, 0x00, 0x1F, 0xBF, 0x00, 0x00, 0x0F, 0xFF, - 0x80, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, 0xFF, - 0xF0, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x3F, - 0xFE, 0x00, 0x00, 0x1F, 0xBF, 0x00, 0x00, 0x1F, 0xDF, 0x80, 0x00, 0x1F, - 0xEF, 0xC0, 0x00, 0x3F, 0xE7, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, - 0xF1, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, - 0xE0, 0x3F, 0xFF, 0xFC, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x0F, 0xC0, 0x00, - 0x00, 0x07, 0xE0, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x07, 0xE0, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x1F, - 0x80, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x00, - 0x03, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0x80, 0x00, 0x07, - 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFE, 0xFF, 0xFC, 0x00, 0x07, 0xFE, - 0x00, 0x3F, 0xF0, 0x00, 0x7F, 0xC0, 0x00, 0x3F, 0xC0, 0x07, 0xF8, 0x00, - 0x00, 0xFF, 0x00, 0x7F, 0x80, 0x00, 0x03, 0xFC, 0x03, 0xF8, 0x00, 0x00, - 0x0F, 0xE0, 0x3F, 0x80, 0x00, 0x00, 0x3F, 0x81, 0xF8, 0x00, 0x00, 0x00, - 0xFC, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0xFC, 0x00, 0x00, 0x00, 0x1F, - 0x87, 0xE0, 0x00, 0x00, 0x00, 0xFC, 0x7E, 0x00, 0x00, 0x00, 0x03, 0xF3, - 0xF0, 0x00, 0x00, 0x00, 0x1F, 0x9F, 0x80, 0x00, 0x00, 0x00, 0xFC, 0xFC, - 0x00, 0x00, 0x00, 0x07, 0xE7, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00, - 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, - 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xF8, 0x00, 0x00, 0x00, - 0x03, 0xF7, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0x3F, 0x00, 0x00, 0x00, 0x01, - 0xF9, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xCF, 0xC0, 0x00, 0x00, 0x00, 0x7E, - 0x7E, 0x00, 0x00, 0x00, 0x03, 0xF1, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0x0F, - 0xC0, 0x00, 0x02, 0x01, 0xF8, 0x7F, 0x00, 0x00, 0x38, 0x1F, 0xC1, 0xF8, - 0x00, 0x03, 0xE0, 0xFC, 0x0F, 0xE0, 0x00, 0x3F, 0x8F, 0xE0, 0x3F, 0x80, - 0x00, 0xFF, 0xFE, 0x00, 0xFE, 0x00, 0x01, 0xFF, 0xE0, 0x07, 0xF8, 0x00, - 0x07, 0xFF, 0x00, 0x1F, 0xF0, 0x00, 0x1F, 0xF0, 0x00, 0x7F, 0xE0, 0x03, - 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x07, 0xFF, 0xFF, 0xFF, - 0xF8, 0x00, 0x0F, 0xFF, 0xFF, 0xEF, 0xE0, 0x00, 0x1F, 0xFF, 0xFC, 0x3F, - 0x80, 0x00, 0x1F, 0xFF, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x01, 0xE0, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, - 0xFF, 0xFF, 0x80, 0x07, 0xFF, 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, 0xFF, 0xFF, - 0x01, 0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xFF, 0xF8, 0x7E, 0x00, - 0x01, 0xFF, 0xC3, 0xF0, 0x00, 0x00, 0xFF, 0x1F, 0x80, 0x00, 0x03, 0xF8, - 0xFC, 0x00, 0x00, 0x0F, 0xE7, 0xE0, 0x00, 0x00, 0x7F, 0x3F, 0x00, 0x00, - 0x01, 0xF9, 0xF8, 0x00, 0x00, 0x0F, 0xCF, 0xC0, 0x00, 0x00, 0x7E, 0x7E, - 0x00, 0x00, 0x03, 0xF3, 0xF0, 0x00, 0x00, 0x1F, 0x9F, 0x80, 0x00, 0x00, - 0xFC, 0xFC, 0x00, 0x00, 0x0F, 0xC7, 0xE0, 0x00, 0x00, 0x7E, 0x3F, 0x00, - 0x00, 0x07, 0xF1, 0xF8, 0x00, 0x00, 0x7F, 0x0F, 0xC0, 0x00, 0x0F, 0xF0, - 0x7F, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xFF, - 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xF0, 0x3F, - 0x00, 0x00, 0x7F, 0xC1, 0xF8, 0x00, 0x00, 0x7F, 0x0F, 0xC0, 0x00, 0x01, - 0xF8, 0x7E, 0x00, 0x00, 0x0F, 0xE3, 0xF0, 0x00, 0x00, 0x3F, 0x1F, 0x80, - 0x00, 0x01, 0xF8, 0xFC, 0x00, 0x00, 0x0F, 0xC7, 0xE0, 0x00, 0x00, 0x7E, - 0x3F, 0x00, 0x00, 0x03, 0xF1, 0xF8, 0x00, 0x00, 0x1F, 0x8F, 0xC0, 0x00, - 0x00, 0xFC, 0x7E, 0x00, 0x00, 0x07, 0xE3, 0xF0, 0x00, 0x00, 0x3F, 0x1F, - 0x80, 0x00, 0x01, 0xF8, 0xFC, 0x00, 0x00, 0x0F, 0xC7, 0xE0, 0x00, 0x00, - 0x3F, 0x3F, 0x00, 0x00, 0x01, 0xF9, 0xF8, 0x00, 0x00, 0x0F, 0xEF, 0xC0, - 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x3F, 0xFF, - 0xFF, 0x80, 0x07, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xE0, 0x7F, 0xE0, 0x1F, - 0xF0, 0x00, 0xFF, 0x01, 0xFC, 0x00, 0x03, 0xF8, 0x3F, 0x80, 0x00, 0x1F, - 0x83, 0xF0, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x0F, 0xC3, 0xE0, 0x00, - 0x00, 0x7C, 0x7E, 0x00, 0x00, 0x07, 0xC7, 0xE0, 0x00, 0x00, 0x7C, 0x7E, - 0x00, 0x00, 0x07, 0xE7, 0xF0, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, - 0x03, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xC0, - 0x00, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xFF, 0x80, 0x00, 0x03, - 0xFF, 0xFF, 0x80, 0x00, 0x1F, 0xFF, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0xFC, - 0x00, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xFF, 0x80, 0x00, 0x00, - 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x01, 0xFE, 0x00, - 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x03, - 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, - 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, 0xF7, 0xE0, 0x00, 0x00, 0x3F, 0x7E, - 0x00, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x00, 0x7E, 0x3F, 0x80, 0x00, 0x0F, - 0xE3, 0xFC, 0x00, 0x01, 0xFC, 0x1F, 0xF8, 0x00, 0xFF, 0x80, 0xFF, 0xFF, - 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xFF, 0xC0, 0x00, - 0xFF, 0xFF, 0xF0, 0x00, 0x01, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x1F, - 0x80, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x1F, - 0x80, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x1F, - 0x80, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x1F, - 0x80, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x1F, - 0x80, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0xFC, - 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, - 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, - 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, - 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, - 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, - 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, - 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, - 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, - 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, - 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, - 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, - 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, - 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x03, - 0xF7, 0xE0, 0x00, 0x00, 0x7E, 0x7E, 0x00, 0x00, 0x07, 0xE7, 0xE0, 0x00, - 0x00, 0xFE, 0x7F, 0x00, 0x00, 0x0F, 0xC3, 0xF8, 0x00, 0x01, 0xFC, 0x1F, - 0xC0, 0x00, 0x7F, 0x81, 0xFF, 0x80, 0x1F, 0xF8, 0x0F, 0xFF, 0xFF, 0xFF, - 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, - 0xFF, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFF, - 0xFC, 0x00, 0x00, 0x01, 0xF9, 0xF8, 0x00, 0x00, 0x03, 0xF3, 0xF0, 0x00, - 0x00, 0x0F, 0xC7, 0xF0, 0x00, 0x00, 0x1F, 0x87, 0xE0, 0x00, 0x00, 0x3F, - 0x0F, 0xC0, 0x00, 0x00, 0xFC, 0x0F, 0xC0, 0x00, 0x01, 0xF8, 0x1F, 0x80, - 0x00, 0x03, 0xF0, 0x3F, 0x00, 0x00, 0x0F, 0xC0, 0x3F, 0x00, 0x00, 0x1F, - 0x80, 0x7E, 0x00, 0x00, 0x3F, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0x01, 0xF8, 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x03, 0xF8, 0x00, 0x0F, - 0xC0, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x00, 0x3F, 0x00, 0x07, - 0xE0, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x03, - 0xF0, 0x00, 0x1F, 0x80, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x1F, 0x80, 0x00, - 0x7E, 0x00, 0x3F, 0x00, 0x00, 0x7E, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x01, - 0xF8, 0x00, 0x01, 0xF8, 0x03, 0xE0, 0x00, 0x01, 0xF8, 0x0F, 0xC0, 0x00, - 0x03, 0xF0, 0x1F, 0x80, 0x00, 0x07, 0xE0, 0x3E, 0x00, 0x00, 0x07, 0xE0, - 0xFC, 0x00, 0x00, 0x0F, 0xC1, 0xF8, 0x00, 0x00, 0x0F, 0x83, 0xE0, 0x00, - 0x00, 0x1F, 0x8F, 0xC0, 0x00, 0x00, 0x3F, 0x1F, 0x80, 0x00, 0x00, 0x3E, - 0x3E, 0x00, 0x00, 0x00, 0x7E, 0xFC, 0x00, 0x00, 0x00, 0xFD, 0xF8, 0x00, - 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x03, - 0xFF, 0x80, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x00, - 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, - 0x1F, 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x1F, 0x9F, - 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x07, 0xE7, 0xE0, 0x00, 0x07, 0xF8, 0x00, - 0x03, 0xF9, 0xFC, 0x00, 0x01, 0xFE, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, - 0x7F, 0x80, 0x00, 0x3F, 0x0F, 0xC0, 0x00, 0x3F, 0xF0, 0x00, 0x0F, 0xC3, - 0xF0, 0x00, 0x0F, 0xFC, 0x00, 0x03, 0xF0, 0xFE, 0x00, 0x03, 0xFF, 0x00, - 0x01, 0xFC, 0x1F, 0x80, 0x01, 0xFF, 0xC0, 0x00, 0x7E, 0x07, 0xE0, 0x00, - 0x7F, 0xF8, 0x00, 0x1F, 0x81, 0xF8, 0x00, 0x1F, 0x7E, 0x00, 0x07, 0xE0, - 0x7F, 0x00, 0x07, 0xCF, 0x80, 0x03, 0xF8, 0x0F, 0xC0, 0x03, 0xF3, 0xF0, - 0x00, 0xFC, 0x03, 0xF0, 0x00, 0xF8, 0xFC, 0x00, 0x3F, 0x00, 0xFC, 0x00, - 0x3E, 0x1F, 0x00, 0x0F, 0xC0, 0x3F, 0x80, 0x0F, 0x87, 0xC0, 0x07, 0xF0, - 0x07, 0xE0, 0x07, 0xE1, 0xF8, 0x01, 0xF8, 0x01, 0xF8, 0x01, 0xF0, 0x7E, - 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x7C, 0x0F, 0x80, 0x1F, 0x80, 0x1F, 0x80, - 0x3F, 0x03, 0xF0, 0x07, 0xE0, 0x03, 0xF0, 0x0F, 0xC0, 0xFC, 0x03, 0xF0, - 0x00, 0xFC, 0x03, 0xE0, 0x1F, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0xF8, 0x07, - 0xC0, 0x3F, 0x00, 0x0F, 0xC0, 0x7E, 0x01, 0xF8, 0x0F, 0xC0, 0x01, 0xF8, - 0x1F, 0x00, 0x7E, 0x07, 0xE0, 0x00, 0x7E, 0x07, 0xC0, 0x0F, 0x81, 0xF8, - 0x00, 0x1F, 0x81, 0xF0, 0x03, 0xE0, 0x7E, 0x00, 0x07, 0xE0, 0xFC, 0x00, - 0xFC, 0x1F, 0x80, 0x00, 0xFC, 0x3E, 0x00, 0x1F, 0x07, 0xC0, 0x00, 0x3F, - 0x0F, 0x80, 0x07, 0xC3, 0xF0, 0x00, 0x0F, 0xC7, 0xE0, 0x01, 0xF8, 0xFC, - 0x00, 0x03, 0xF1, 0xF8, 0x00, 0x7E, 0x3F, 0x00, 0x00, 0x7C, 0x7C, 0x00, - 0x0F, 0x8F, 0x80, 0x00, 0x1F, 0x9F, 0x00, 0x03, 0xE7, 0xE0, 0x00, 0x07, - 0xEF, 0xC0, 0x00, 0xFD, 0xF8, 0x00, 0x01, 0xFB, 0xE0, 0x00, 0x1F, 0x7E, - 0x00, 0x00, 0x3E, 0xF8, 0x00, 0x07, 0xDF, 0x00, 0x00, 0x0F, 0xFE, 0x00, - 0x01, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x7F, 0xF0, 0x00, 0x00, - 0x7F, 0xC0, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x03, 0xFE, - 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0x00, - 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF8, 0x00, 0x00, - 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x7F, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xFE, 0x3F, 0x80, 0x00, 0x01, 0xFC, - 0x1F, 0xC0, 0x00, 0x01, 0xF8, 0x0F, 0xE0, 0x00, 0x03, 0xF8, 0x0F, 0xE0, - 0x00, 0x07, 0xF0, 0x07, 0xF0, 0x00, 0x07, 0xE0, 0x03, 0xF8, 0x00, 0x0F, - 0xE0, 0x03, 0xF8, 0x00, 0x1F, 0xC0, 0x01, 0xFC, 0x00, 0x1F, 0x80, 0x00, - 0xFE, 0x00, 0x3F, 0x80, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x00, - 0x7E, 0x00, 0x00, 0x3F, 0x80, 0xFE, 0x00, 0x00, 0x1F, 0x81, 0xFC, 0x00, - 0x00, 0x1F, 0xC1, 0xF8, 0x00, 0x00, 0x0F, 0xE3, 0xF0, 0x00, 0x00, 0x07, - 0xE7, 0xF0, 0x00, 0x00, 0x07, 0xF7, 0xE0, 0x00, 0x00, 0x03, 0xFF, 0xC0, - 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x00, - 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, - 0x00, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, - 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x07, 0xF7, 0xE0, 0x00, 0x00, 0x0F, - 0xE7, 0xF0, 0x00, 0x00, 0x0F, 0xC3, 0xF8, 0x00, 0x00, 0x1F, 0xC1, 0xF8, - 0x00, 0x00, 0x3F, 0x81, 0xFC, 0x00, 0x00, 0x3F, 0x00, 0xFE, 0x00, 0x00, - 0x7F, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x00, 0xFC, 0x00, - 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x3F, 0x80, 0x03, 0xF8, 0x00, 0x1F, 0xC0, - 0x03, 0xF0, 0x00, 0x0F, 0xE0, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x0F, 0xE0, - 0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x1F, 0xC0, 0x00, 0x03, - 0xF8, 0x3F, 0x80, 0x00, 0x01, 0xFC, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x7F, - 0x00, 0x00, 0x00, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0x3F, 0x80, 0x00, - 0x00, 0x3F, 0x9F, 0xE0, 0x00, 0x00, 0x3F, 0x87, 0xF0, 0x00, 0x00, 0x1F, - 0xC1, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x3F, - 0x80, 0x00, 0x0F, 0xE0, 0x0F, 0xE0, 0x00, 0x0F, 0xE0, 0x07, 0xF0, 0x00, - 0x07, 0xE0, 0x01, 0xFC, 0x00, 0x07, 0xF0, 0x00, 0xFE, 0x00, 0x03, 0xF0, - 0x00, 0x3F, 0x80, 0x03, 0xF8, 0x00, 0x0F, 0xE0, 0x03, 0xF8, 0x00, 0x07, - 0xF0, 0x01, 0xF8, 0x00, 0x01, 0xFC, 0x01, 0xFC, 0x00, 0x00, 0x7E, 0x00, - 0xFC, 0x00, 0x00, 0x3F, 0x80, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0xFE, 0x00, - 0x00, 0x07, 0xF0, 0x7E, 0x00, 0x00, 0x01, 0xFC, 0x7F, 0x00, 0x00, 0x00, - 0x7E, 0x3F, 0x00, 0x00, 0x00, 0x3F, 0xBF, 0x00, 0x00, 0x00, 0x0F, 0xFF, - 0x80, 0x00, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, - 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, - 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x01, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, - 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0x80, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x03, 0xE0, - 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x07, 0xC0, - 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, - 0x3F, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, - 0xFF, 0x9F, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, - 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF8, - 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x0F, - 0xE0, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, - 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, - 0x00, 0x7F, 0x80, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x0F, 0xF0, - 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, - 0x00, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, - 0x00, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x1F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, - 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, - 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, - 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, - 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, - 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, - 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xF0, 0xE0, 0x00, 0x38, 0x00, 0x0F, 0x00, 0x01, 0xC0, 0x00, - 0x70, 0x00, 0x1E, 0x00, 0x03, 0x80, 0x00, 0xE0, 0x00, 0x3C, 0x00, 0x0F, - 0x00, 0x01, 0xC0, 0x00, 0x78, 0x00, 0x1E, 0x00, 0x03, 0x80, 0x00, 0xF0, - 0x00, 0x3C, 0x00, 0x07, 0x00, 0x01, 0xC0, 0x00, 0x78, 0x00, 0x0E, 0x00, - 0x03, 0x80, 0x00, 0xF0, 0x00, 0x1C, 0x00, 0x07, 0x00, 0x01, 0xE0, 0x00, - 0x38, 0x00, 0x0E, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x1C, 0x00, 0x07, - 0x80, 0x01, 0xE0, 0x00, 0x38, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0x70, - 0x00, 0x1C, 0x00, 0x07, 0x80, 0x00, 0xE0, 0x00, 0x38, 0x00, 0x0F, 0x00, - 0x01, 0xC0, 0x00, 0x70, 0x00, 0x1E, 0x00, 0x03, 0x80, 0x00, 0xE0, 0x00, - 0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x1F, 0x01, 0xF0, - 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, - 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, - 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, - 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, - 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, - 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x7C, 0x00, 0x00, 0x7C, 0x00, - 0x00, 0x7E, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFF, 0x00, 0x01, 0xFF, 0x00, - 0x01, 0xEF, 0x80, 0x01, 0xE7, 0x80, 0x03, 0xC7, 0x80, 0x03, 0xC7, 0xC0, - 0x07, 0xC3, 0xC0, 0x07, 0x83, 0xE0, 0x0F, 0x81, 0xE0, 0x0F, 0x01, 0xE0, - 0x0F, 0x01, 0xF0, 0x1F, 0x00, 0xF0, 0x1E, 0x00, 0xF8, 0x3E, 0x00, 0x78, - 0x3C, 0x00, 0x78, 0x3C, 0x00, 0x7C, 0x7C, 0x00, 0x3C, 0x78, 0x00, 0x3E, - 0xF8, 0x00, 0x1E, 0xF0, 0x00, 0x1E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0x00, 0xFC, 0x01, - 0xF8, 0x03, 0xF0, 0x07, 0xC0, 0x0F, 0x80, 0x1E, 0x00, 0x3C, 0x00, 0x78, - 0x00, 0xE0, 0x00, 0x3F, 0xE0, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, - 0xFC, 0x00, 0x7F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xFC, 0x07, 0xF8, 0x07, - 0xF8, 0x0F, 0xC0, 0x03, 0xF0, 0x1F, 0x00, 0x03, 0xF0, 0x7E, 0x00, 0x07, - 0xE0, 0xFC, 0x00, 0x0F, 0xC1, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x0F, 0xF8, - 0x00, 0x07, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xFF, 0xC0, - 0x7F, 0xFF, 0x9F, 0x81, 0xFF, 0xC0, 0x3F, 0x07, 0xF8, 0x00, 0x7E, 0x1F, - 0xC0, 0x00, 0xFC, 0x3F, 0x00, 0x01, 0xF8, 0x7E, 0x00, 0x03, 0xF0, 0xF8, - 0x00, 0x07, 0xE1, 0xF0, 0x00, 0x0F, 0xC3, 0xE0, 0x00, 0x1F, 0x87, 0xC0, - 0x00, 0x7F, 0x0F, 0xC0, 0x01, 0xFE, 0x1F, 0xC0, 0x0F, 0xFC, 0x1F, 0xE0, - 0x7F, 0xFC, 0x3F, 0xFF, 0xFD, 0xFF, 0x3F, 0xFF, 0xE3, 0xFE, 0x3F, 0xFF, - 0x83, 0xFC, 0x1F, 0xFC, 0x03, 0xF8, 0xFC, 0x00, 0x00, 0x03, 0xF0, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0x03, 0xF0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x00, 0xFC, 0x0F, 0xF0, 0x03, 0xF0, 0xFF, 0xF0, 0x0F, 0xCF, - 0xFF, 0xF0, 0x3F, 0x7F, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0xC3, 0xFF, 0xC0, - 0xFF, 0x8F, 0xFC, 0x00, 0xFE, 0x3F, 0xE0, 0x01, 0xFC, 0xFF, 0x00, 0x03, - 0xF3, 0xF8, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x1F, 0xBF, 0x80, 0x00, 0x7E, - 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, - 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xC0, - 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, - 0x03, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x3E, 0xFE, 0x00, 0x01, - 0xFB, 0xF8, 0x00, 0x07, 0xEF, 0xF0, 0x00, 0x3F, 0x3F, 0xC0, 0x01, 0xFC, - 0xFF, 0x80, 0x0F, 0xE3, 0xFF, 0x80, 0x7F, 0x8F, 0xBF, 0xFF, 0xFC, 0x3E, - 0xFF, 0xFF, 0xE0, 0xF9, 0xFF, 0xFF, 0x03, 0xE1, 0xFF, 0xF8, 0x00, 0x01, - 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x0F, 0xFF, 0x80, 0x01, 0xFF, - 0xFE, 0x00, 0x7F, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0x80, 0xFE, 0x03, 0xFC, - 0x1F, 0xC0, 0x0F, 0xC3, 0xF8, 0x00, 0x7E, 0x3F, 0x00, 0x07, 0xE7, 0xE0, - 0x00, 0x3E, 0x7E, 0x00, 0x03, 0xE7, 0xC0, 0x00, 0x3F, 0xFC, 0x00, 0x00, - 0x0F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xF8, - 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x0F, 0x80, 0x00, - 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x1F, 0x7C, 0x00, 0x03, 0xF7, 0xE0, 0x00, 0x3F, 0x7E, 0x00, - 0x03, 0xE3, 0xF0, 0x00, 0x7E, 0x3F, 0x80, 0x0F, 0xE1, 0xFC, 0x01, 0xFC, - 0x0F, 0xFD, 0xFF, 0x80, 0x7F, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0x00, 0x1F, - 0xFF, 0xC0, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, - 0x07, 0xC0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x0F, - 0x80, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x1F, 0x00, - 0x00, 0x00, 0xF8, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x3E, 0x00, 0x00, - 0x01, 0xF0, 0x03, 0xF8, 0x0F, 0x80, 0x7F, 0xF8, 0x7C, 0x0F, 0xFF, 0xF3, - 0xE0, 0xFF, 0xFF, 0xDF, 0x0F, 0xFF, 0xFE, 0xF8, 0xFF, 0x81, 0xFF, 0xCF, - 0xF0, 0x03, 0xFE, 0x7F, 0x00, 0x0F, 0xF7, 0xF0, 0x00, 0x7F, 0xBF, 0x00, - 0x01, 0xFD, 0xF8, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x3F, 0xFC, 0x00, 0x01, - 0xFF, 0xE0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x01, 0xFF, - 0x80, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x03, 0xFF, 0x00, - 0x00, 0x1F, 0xF8, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0x00, 0x00, - 0x7F, 0xF8, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x1F, 0xBF, 0x00, 0x01, 0xFD, - 0xF8, 0x00, 0x0F, 0xE7, 0xE0, 0x00, 0xFF, 0x3F, 0x80, 0x0F, 0xF8, 0xFF, - 0x00, 0xFF, 0xC7, 0xFF, 0x7F, 0xDE, 0x1F, 0xFF, 0xFC, 0xF0, 0x7F, 0xFF, - 0xC7, 0x80, 0xFF, 0xFC, 0x3C, 0x01, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x07, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFE, 0x00, - 0xFF, 0xFF, 0xF8, 0x0F, 0xF0, 0x1F, 0xE0, 0xFE, 0x00, 0x3F, 0x87, 0xE0, - 0x00, 0xFC, 0x7E, 0x00, 0x03, 0xF3, 0xF0, 0x00, 0x1F, 0x9F, 0x00, 0x00, - 0x7D, 0xF8, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x7F, - 0xE0, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x0F, 0x80, 0x00, - 0x00, 0x7C, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, - 0xFC, 0x00, 0x01, 0xFB, 0xE0, 0x00, 0x0F, 0x9F, 0x80, 0x00, 0xFC, 0xFE, - 0x00, 0x07, 0xE3, 0xF8, 0x00, 0x7E, 0x0F, 0xE0, 0x0F, 0xF0, 0x7F, 0xF7, - 0xFF, 0x01, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xE0, - 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x7E, 0x03, 0xFC, 0x0F, 0xF8, 0x3F, 0xF0, - 0x7F, 0xA0, 0xFC, 0x01, 0xF0, 0x03, 0xE0, 0x07, 0xC0, 0x0F, 0x80, 0x1F, - 0x00, 0x3E, 0x00, 0x7C, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, - 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x01, 0xF0, 0x03, - 0xE0, 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8, - 0x01, 0xF0, 0x03, 0xE0, 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, - 0x7C, 0x00, 0xF8, 0x01, 0xF0, 0x03, 0xE0, 0x07, 0xC0, 0x0F, 0x80, 0x1F, - 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, - 0xFF, 0x07, 0xC0, 0xFF, 0xFE, 0x3E, 0x0F, 0xFF, 0xF9, 0xF0, 0xFF, 0xFF, - 0xEF, 0x8F, 0xF0, 0x1F, 0xFC, 0x7F, 0x00, 0x7F, 0xE7, 0xE0, 0x01, 0xFF, - 0x3F, 0x00, 0x07, 0xFB, 0xF0, 0x00, 0x1F, 0xDF, 0x80, 0x00, 0xFE, 0xF8, - 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0xFF, 0xF0, 0x00, - 0x07, 0xFF, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x0F, - 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x1F, 0xFE, - 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x3F, 0x7C, 0x00, - 0x03, 0xFB, 0xF0, 0x00, 0x1F, 0xDF, 0x80, 0x01, 0xFE, 0x7E, 0x00, 0x0F, - 0xF3, 0xF8, 0x00, 0xFF, 0x8F, 0xE0, 0x0F, 0xFC, 0x3F, 0xF7, 0xFF, 0xE1, - 0xFF, 0xFF, 0xBF, 0x07, 0xFF, 0xF9, 0xF8, 0x0F, 0xFF, 0x8F, 0xC0, 0x1F, - 0xF0, 0x7E, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, - 0xF9, 0xF0, 0x00, 0x0F, 0xCF, 0xC0, 0x00, 0x7C, 0x7E, 0x00, 0x07, 0xE1, - 0xF8, 0x00, 0x7F, 0x0F, 0xF0, 0x07, 0xF0, 0x3F, 0xFF, 0xFF, 0x00, 0xFF, - 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x03, 0xF0, - 0x00, 0xFC, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x3F, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF0, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x0F, 0xC0, 0xFF, 0x01, 0xF8, 0x7F, 0xF8, - 0x3F, 0x3F, 0xFF, 0xC7, 0xEF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0x9F, 0xFC, - 0x07, 0xFB, 0xFE, 0x00, 0x3F, 0x7F, 0x80, 0x07, 0xFF, 0xF0, 0x00, 0x7F, - 0xFC, 0x00, 0x0F, 0xFF, 0x80, 0x01, 0xFF, 0xE0, 0x00, 0x3F, 0xFC, 0x00, - 0x07, 0xFF, 0x80, 0x00, 0xFF, 0xF0, 0x00, 0x1F, 0xFE, 0x00, 0x03, 0xFF, - 0xC0, 0x00, 0x7F, 0xF8, 0x00, 0x0F, 0xFF, 0x00, 0x01, 0xFF, 0xE0, 0x00, - 0x3F, 0xFC, 0x00, 0x07, 0xFF, 0x80, 0x00, 0xFF, 0xF0, 0x00, 0x1F, 0xFE, - 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x7F, 0xF8, 0x00, 0x0F, 0xFF, 0x00, 0x01, - 0xFF, 0xE0, 0x00, 0x3F, 0xFC, 0x00, 0x07, 0xFF, 0x80, 0x00, 0xFF, 0xF0, - 0x00, 0x1F, 0xFE, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x7F, 0xF8, 0x00, 0x0F, - 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, - 0x7E, 0x0F, 0xC1, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, - 0xC1, 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, - 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, - 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, 0x3F, - 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC3, 0xF7, 0xFE, 0xFF, - 0xDF, 0xF3, 0xFC, 0x78, 0x00, 0xF8, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, - 0xF8, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x0F, 0x80, - 0x00, 0x00, 0xF8, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0xF8, 0x00, 0x00, - 0x0F, 0x80, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0xF8, - 0x00, 0x00, 0x0F, 0x80, 0x03, 0xF8, 0xF8, 0x00, 0x7F, 0x0F, 0x80, 0x0F, - 0xE0, 0xF8, 0x01, 0xFC, 0x0F, 0x80, 0x3F, 0x80, 0xF8, 0x07, 0xF0, 0x0F, - 0x80, 0xFE, 0x00, 0xF8, 0x1F, 0xC0, 0x0F, 0x83, 0xF8, 0x00, 0xF8, 0x7F, - 0x00, 0x0F, 0x8F, 0xE0, 0x00, 0xF9, 0xFC, 0x00, 0x0F, 0xBF, 0xE0, 0x00, - 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0x80, 0x0F, 0xF9, - 0xF8, 0x00, 0xFF, 0x1F, 0xC0, 0x0F, 0xE0, 0xFE, 0x00, 0xFC, 0x07, 0xE0, - 0x0F, 0x80, 0x7F, 0x00, 0xF8, 0x03, 0xF0, 0x0F, 0x80, 0x1F, 0x80, 0xF8, - 0x01, 0xFC, 0x0F, 0x80, 0x0F, 0xC0, 0xF8, 0x00, 0xFE, 0x0F, 0x80, 0x07, - 0xF0, 0xF8, 0x00, 0x3F, 0x0F, 0x80, 0x03, 0xF8, 0xF8, 0x00, 0x1F, 0x8F, - 0x80, 0x00, 0xFC, 0xF8, 0x00, 0x0F, 0xEF, 0x80, 0x00, 0x7E, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x0F, 0xE0, - 0x01, 0xFC, 0x0F, 0x83, 0xFF, 0x80, 0xFF, 0xF0, 0xF8, 0xFF, 0xFC, 0x1F, - 0xFF, 0xCF, 0x9F, 0xFF, 0xE3, 0xFF, 0xFC, 0xFB, 0xFF, 0xFF, 0x7F, 0xFF, - 0xEF, 0xFC, 0x07, 0xFF, 0x80, 0xFE, 0xFF, 0x80, 0x3F, 0xF0, 0x07, 0xFF, - 0xF0, 0x01, 0xFE, 0x00, 0x3F, 0xFE, 0x00, 0x1F, 0xC0, 0x03, 0xFF, 0xC0, - 0x01, 0xFC, 0x00, 0x1F, 0xFC, 0x00, 0x0F, 0x80, 0x01, 0xFF, 0xC0, 0x00, - 0xF8, 0x00, 0x1F, 0xFC, 0x00, 0x0F, 0x80, 0x01, 0xFF, 0xC0, 0x00, 0xF8, - 0x00, 0x1F, 0xFC, 0x00, 0x0F, 0x80, 0x01, 0xFF, 0xC0, 0x00, 0xF8, 0x00, - 0x1F, 0xFC, 0x00, 0x0F, 0x80, 0x01, 0xFF, 0xC0, 0x00, 0xF8, 0x00, 0x1F, - 0xFC, 0x00, 0x0F, 0x80, 0x01, 0xFF, 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0xFC, - 0x00, 0x0F, 0x80, 0x01, 0xFF, 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0xFC, 0x00, - 0x0F, 0x80, 0x01, 0xFF, 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0xFC, 0x00, 0x0F, - 0x80, 0x01, 0xFF, 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0xFC, 0x00, 0x0F, 0x80, - 0x01, 0xFF, 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0xFC, 0x00, 0x0F, 0x80, 0x01, - 0xFF, 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0xFC, 0x00, 0x0F, 0x80, 0x01, 0xFF, - 0xC0, 0x00, 0xF8, 0x00, 0x1F, 0xFC, 0x00, 0x0F, 0x80, 0x01, 0xFF, 0xC0, - 0x00, 0xF8, 0x00, 0x1F, 0x00, 0x07, 0xF0, 0x1F, 0x07, 0xFF, 0x83, 0xE1, - 0xFF, 0xFC, 0x7C, 0x7F, 0xFF, 0xCF, 0x9F, 0xFF, 0xFD, 0xF7, 0xC0, 0x7F, - 0xBF, 0xE0, 0x03, 0xF7, 0xF8, 0x00, 0x7F, 0xFF, 0x00, 0x07, 0xFF, 0xC0, - 0x00, 0xFF, 0xF8, 0x00, 0x1F, 0xFE, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x7F, - 0xF8, 0x00, 0x0F, 0xFF, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x3F, 0xFC, 0x00, - 0x07, 0xFF, 0x80, 0x00, 0xFF, 0xF0, 0x00, 0x1F, 0xFE, 0x00, 0x03, 0xFF, - 0xC0, 0x00, 0x7F, 0xF8, 0x00, 0x0F, 0xFF, 0x00, 0x01, 0xFF, 0xE0, 0x00, - 0x3F, 0xFC, 0x00, 0x07, 0xFF, 0x80, 0x00, 0xFF, 0xF0, 0x00, 0x1F, 0xFE, - 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x7F, 0xF8, 0x00, 0x0F, 0xFF, 0x00, 0x01, - 0xFF, 0xE0, 0x00, 0x3F, 0xFC, 0x00, 0x07, 0xFF, 0x80, 0x00, 0xFC, 0x00, - 0x1F, 0xE0, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xF0, 0x01, 0xFF, - 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xC0, 0x3F, 0xC0, 0x7F, 0x81, 0xFC, 0x00, - 0xFE, 0x0F, 0xE0, 0x01, 0xFC, 0x3F, 0x00, 0x03, 0xF0, 0xFC, 0x00, 0x07, - 0xE7, 0xE0, 0x00, 0x1F, 0x9F, 0x80, 0x00, 0x3E, 0x7C, 0x00, 0x00, 0xFD, - 0xF0, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x1F, 0xFC, - 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0x00, - 0x00, 0x1F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x03, 0xF7, 0xC0, 0x00, - 0x0F, 0xDF, 0x00, 0x00, 0x3F, 0x7E, 0x00, 0x00, 0xF9, 0xF8, 0x00, 0x07, - 0xE3, 0xF0, 0x00, 0x1F, 0x8F, 0xE0, 0x00, 0xFC, 0x1F, 0x80, 0x07, 0xF0, - 0x7F, 0x80, 0x3F, 0x80, 0xFF, 0xCF, 0xFC, 0x01, 0xFF, 0xFF, 0xE0, 0x03, - 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x00, - 0x0F, 0xE0, 0x03, 0xE0, 0xFF, 0xF0, 0x0F, 0x8F, 0xFF, 0xF0, 0x3E, 0x7F, - 0xFF, 0xE0, 0xFB, 0xFF, 0xFF, 0xC3, 0xEF, 0xC0, 0xFF, 0x8F, 0xFC, 0x00, - 0xFE, 0x3F, 0xE0, 0x01, 0xFC, 0xFF, 0x00, 0x03, 0xF3, 0xFC, 0x00, 0x0F, - 0xEF, 0xE0, 0x00, 0x1F, 0xBF, 0x80, 0x00, 0x7E, 0xFC, 0x00, 0x00, 0xFB, - 0xF0, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x3F, 0xFC, - 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0x00, - 0x00, 0x3F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xC0, 0x00, - 0x0F, 0xFF, 0x00, 0x00, 0x3E, 0xFE, 0x00, 0x01, 0xFB, 0xF8, 0x00, 0x07, - 0xEF, 0xF0, 0x00, 0x3F, 0xBF, 0xE0, 0x01, 0xFC, 0xFF, 0x80, 0x0F, 0xF3, - 0xFF, 0x80, 0x7F, 0x8F, 0xFF, 0xFF, 0xFC, 0x3F, 0x7F, 0xFF, 0xE0, 0xFC, - 0xFF, 0xFF, 0x03, 0xF1, 0xFF, 0xF8, 0x0F, 0xC1, 0xFF, 0x80, 0x3F, 0x00, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x0F, 0xC0, 0x00, - 0x00, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, - 0x0F, 0xC0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x03, - 0xF0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0xC0, 0x00, 0x07, 0xFF, 0x83, 0xC0, 0xFF, 0xFF, 0x1E, 0x0F, 0xFF, - 0xFC, 0xF0, 0xFF, 0xFF, 0xF7, 0x8F, 0xF8, 0x1F, 0xFC, 0xFF, 0x00, 0x3F, - 0xE7, 0xF0, 0x00, 0xFF, 0x7F, 0x00, 0x07, 0xFB, 0xF0, 0x00, 0x1F, 0xDF, - 0x80, 0x00, 0x7F, 0xF8, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x1F, 0xFE, 0x00, - 0x00, 0x7F, 0xE0, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, - 0xFF, 0xC0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x01, 0xFF, - 0x80, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x07, 0xFF, 0x80, - 0x00, 0x3F, 0xFC, 0x00, 0x01, 0xFB, 0xF0, 0x00, 0x1F, 0xDF, 0x80, 0x00, - 0xFE, 0xFE, 0x00, 0x0F, 0xF3, 0xF8, 0x00, 0xFF, 0x9F, 0xF0, 0x0F, 0xFC, - 0x7F, 0xF7, 0xFF, 0xE1, 0xFF, 0xFF, 0xDF, 0x07, 0xFF, 0xFC, 0xF8, 0x1F, - 0xFF, 0xC7, 0xC0, 0x3F, 0xF8, 0x3E, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, - 0x0F, 0x80, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x1F, - 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x3E, 0x00, - 0x00, 0x01, 0xF0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x7C, 0x00, 0x00, - 0x03, 0xE0, 0x00, 0x00, 0x1F, 0x00, 0x0F, 0xF8, 0x3F, 0xF8, 0x7F, 0xF8, - 0xFF, 0xF9, 0xFF, 0xFB, 0xFF, 0xFF, 0xE0, 0xFF, 0x80, 0xFF, 0x00, 0xFE, - 0x00, 0xFE, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x7F, 0xFF, 0x00, 0x1F, 0xFF, 0xF0, 0x07, - 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xF0, 0x7F, 0x80, 0xFF, 0x0F, 0xC0, 0x07, - 0xE3, 0xF0, 0x00, 0xFC, 0x7E, 0x00, 0x0F, 0x8F, 0x80, 0x01, 0xF9, 0xF0, - 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFF, 0x00, 0x00, - 0x0F, 0xFC, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0xFF, - 0xFF, 0x80, 0x07, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x1F, 0xFC, - 0x00, 0x00, 0x7F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x3F, 0xFC, 0x00, - 0x07, 0xFF, 0x80, 0x00, 0xFF, 0xF0, 0x00, 0x1F, 0xBF, 0x00, 0x03, 0xF7, - 0xE0, 0x00, 0xFC, 0xFE, 0x00, 0x3F, 0x8F, 0xFE, 0x7F, 0xE1, 0xFF, 0xFF, - 0xFC, 0x1F, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0x80, 0x07, 0xFF, 0xC0, 0x00, - 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, - 0xF0, 0x07, 0xE0, 0x0F, 0xC1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xE1, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, - 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, 0xC0, 0x1F, - 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, - 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, - 0xF8, 0x07, 0xFF, 0x07, 0xFE, 0x0F, 0xFC, 0x07, 0xF8, 0xF8, 0x00, 0x07, - 0xFE, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x7F, 0xE0, 0x00, 0x1F, 0xF8, 0x00, - 0x07, 0xFE, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x7F, 0xE0, 0x00, 0x1F, 0xF8, - 0x00, 0x07, 0xFE, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x7F, 0xE0, 0x00, 0x1F, - 0xF8, 0x00, 0x07, 0xFE, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x7F, 0xE0, 0x00, - 0x1F, 0xF8, 0x00, 0x07, 0xFE, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x7F, 0xE0, - 0x00, 0x1F, 0xF8, 0x00, 0x07, 0xFE, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x7F, - 0xE0, 0x00, 0x3F, 0xF8, 0x00, 0x0F, 0xFF, 0x00, 0x03, 0xFF, 0xC0, 0x01, - 0xFF, 0xF8, 0x00, 0xFF, 0x7F, 0x00, 0x7F, 0xDF, 0xF0, 0x7E, 0xF3, 0xFF, - 0xFF, 0x3C, 0xFF, 0xFF, 0x8F, 0x0F, 0xFF, 0xC3, 0xC1, 0xFF, 0xC0, 0x00, - 0xFC, 0x00, 0x00, 0xFB, 0xF0, 0x00, 0x07, 0xE7, 0xC0, 0x00, 0x1F, 0x9F, - 0x80, 0x00, 0xFC, 0x7E, 0x00, 0x03, 0xF0, 0xF8, 0x00, 0x0F, 0xC3, 0xF0, - 0x00, 0x7E, 0x0F, 0xC0, 0x01, 0xF8, 0x1F, 0x00, 0x07, 0xC0, 0x7E, 0x00, - 0x3F, 0x01, 0xF8, 0x00, 0xFC, 0x03, 0xE0, 0x03, 0xE0, 0x0F, 0xC0, 0x1F, - 0x80, 0x3F, 0x00, 0x7C, 0x00, 0x7C, 0x01, 0xF0, 0x01, 0xF8, 0x0F, 0xC0, - 0x07, 0xE0, 0x3E, 0x00, 0x0F, 0x80, 0xF8, 0x00, 0x3F, 0x07, 0xE0, 0x00, - 0xFC, 0x1F, 0x00, 0x01, 0xF0, 0x7C, 0x00, 0x07, 0xE3, 0xE0, 0x00, 0x0F, - 0x8F, 0x80, 0x00, 0x3E, 0x7E, 0x00, 0x00, 0xFD, 0xF0, 0x00, 0x01, 0xF7, - 0xC0, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xE0, - 0x00, 0x00, 0xFF, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x07, 0xF0, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x7C, 0x00, 0x1F, 0xC0, 0x01, 0xF3, 0xF0, 0x00, - 0xFE, 0x00, 0x1F, 0x9F, 0x80, 0x07, 0xF0, 0x00, 0xFC, 0xFC, 0x00, 0x7F, - 0xC0, 0x07, 0xE3, 0xE0, 0x03, 0xFE, 0x00, 0x3E, 0x1F, 0x80, 0x1F, 0xF0, - 0x03, 0xF0, 0xFC, 0x00, 0xFF, 0x80, 0x1F, 0x83, 0xE0, 0x0F, 0xFE, 0x00, - 0xF8, 0x1F, 0x00, 0x7D, 0xF0, 0x0F, 0xC0, 0xFC, 0x03, 0xEF, 0x80, 0x7E, - 0x07, 0xE0, 0x1E, 0x7C, 0x03, 0xF0, 0x1F, 0x01, 0xF3, 0xF0, 0x1F, 0x00, - 0xF8, 0x0F, 0x8F, 0x81, 0xF8, 0x07, 0xE0, 0x7C, 0x7C, 0x0F, 0xC0, 0x1F, - 0x03, 0xC3, 0xE0, 0x7C, 0x00, 0xF8, 0x3E, 0x1F, 0x83, 0xE0, 0x07, 0xE1, - 0xF0, 0x7C, 0x3F, 0x00, 0x3F, 0x0F, 0x83, 0xE1, 0xF0, 0x00, 0xF8, 0x78, - 0x1F, 0x0F, 0x80, 0x07, 0xC7, 0xC0, 0xFC, 0x7C, 0x00, 0x3F, 0x3E, 0x03, - 0xE7, 0xE0, 0x00, 0xF9, 0xF0, 0x1F, 0x3E, 0x00, 0x07, 0xCF, 0x00, 0xF9, - 0xF0, 0x00, 0x3E, 0xF8, 0x07, 0xEF, 0x80, 0x01, 0xFF, 0xC0, 0x1F, 0xF8, - 0x00, 0x07, 0xFE, 0x00, 0xFF, 0xC0, 0x00, 0x3F, 0xE0, 0x07, 0xFE, 0x00, - 0x01, 0xFF, 0x00, 0x1F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0xFF, 0x00, 0x00, - 0x3F, 0xC0, 0x07, 0xF8, 0x00, 0x01, 0xFE, 0x00, 0x3F, 0xC0, 0x00, 0x07, - 0xE0, 0x00, 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x07, 0xE0, 0x00, 0x7E, 0x00, - 0x03, 0xF1, 0xF8, 0x00, 0x1F, 0x0F, 0xC0, 0x01, 0xF8, 0x3F, 0x00, 0x1F, - 0x80, 0xFC, 0x00, 0xF8, 0x07, 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0xFC, 0x00, - 0x7E, 0x07, 0xC0, 0x01, 0xF0, 0x7E, 0x00, 0x0F, 0xC7, 0xE0, 0x00, 0x3F, - 0x3E, 0x00, 0x00, 0xFB, 0xE0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x1F, 0xF0, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, - 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x07, - 0xDF, 0x00, 0x00, 0x7E, 0xFC, 0x00, 0x07, 0xE3, 0xF0, 0x00, 0x3E, 0x1F, - 0x80, 0x03, 0xF0, 0x7E, 0x00, 0x3F, 0x01, 0xF8, 0x01, 0xF0, 0x0F, 0xC0, - 0x1F, 0x80, 0x3F, 0x01, 0xF8, 0x00, 0xFC, 0x1F, 0x80, 0x07, 0xE0, 0xFC, - 0x00, 0x1F, 0x8F, 0xC0, 0x00, 0x7E, 0xFC, 0x00, 0x03, 0xF0, 0xFC, 0x00, - 0x01, 0xFB, 0xE0, 0x00, 0x0F, 0xDF, 0x80, 0x00, 0x7C, 0xFC, 0x00, 0x07, - 0xE3, 0xE0, 0x00, 0x3E, 0x1F, 0x80, 0x03, 0xF0, 0xFC, 0x00, 0x1F, 0x83, - 0xE0, 0x00, 0xF8, 0x1F, 0x80, 0x0F, 0xC0, 0xFC, 0x00, 0x7E, 0x03, 0xE0, - 0x03, 0xE0, 0x1F, 0x80, 0x3F, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xE0, 0x0F, - 0x80, 0x1F, 0x80, 0xFC, 0x00, 0xFC, 0x07, 0xC0, 0x03, 0xE0, 0x3E, 0x00, - 0x1F, 0x83, 0xF0, 0x00, 0xFC, 0x1F, 0x00, 0x03, 0xE1, 0xF8, 0x00, 0x1F, - 0x8F, 0xC0, 0x00, 0x7C, 0x7C, 0x00, 0x03, 0xE7, 0xE0, 0x00, 0x1F, 0xBE, - 0x00, 0x00, 0x7D, 0xF0, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x1F, 0xF8, 0x00, - 0x00, 0x7F, 0xC0, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x03, 0xF0, 0x00, - 0x00, 0x1F, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0xFC, 0x00, 0x01, 0xDF, 0xE0, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x7F, 0xF0, - 0x00, 0x03, 0xFF, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x38, 0x00, 0x00, - 0x00, 0x7F, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0x3F, - 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0x80, 0x00, - 0x07, 0xE0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x3F, 0x80, 0x00, - 0x07, 0xE0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x07, 0xF0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x0F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x7C, 0x07, 0xF0, 0x3F, 0xC0, 0xFF, - 0x07, 0xE0, 0x1F, 0x00, 0x7C, 0x01, 0xF0, 0x07, 0x80, 0x1E, 0x00, 0x78, - 0x01, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x01, 0xE0, 0x07, 0x80, 0x1E, - 0x00, 0x78, 0x01, 0xE0, 0x07, 0x80, 0x3E, 0x00, 0xF8, 0x03, 0xE0, 0x0F, - 0x80, 0x7E, 0x03, 0xF0, 0x3F, 0xC0, 0xFC, 0x03, 0xE0, 0x0F, 0xC0, 0x3F, - 0x80, 0x7F, 0x00, 0x7C, 0x00, 0xF8, 0x03, 0xE0, 0x0F, 0x80, 0x3E, 0x00, - 0x78, 0x01, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x01, 0xE0, 0x07, 0x80, - 0x1E, 0x00, 0x78, 0x01, 0xE0, 0x07, 0x80, 0x1E, 0x00, 0x78, 0x01, 0xE0, - 0x07, 0xC0, 0x1F, 0x00, 0x7C, 0x01, 0xFF, 0x03, 0xFC, 0x07, 0xF0, 0x0F, - 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF8, 0x01, 0xFC, 0x03, 0xFC, - 0x07, 0xFC, 0x01, 0xF8, 0x01, 0xF0, 0x01, 0xF0, 0x03, 0xE0, 0x07, 0xC0, - 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x01, 0xF0, 0x03, - 0xE0, 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8, - 0x01, 0xF0, 0x03, 0xE0, 0x07, 0xC0, 0x07, 0xC0, 0x0F, 0xC0, 0x0F, 0xE0, - 0x0F, 0xE0, 0x07, 0xC0, 0x1F, 0x80, 0xFF, 0x01, 0xF8, 0x07, 0xC0, 0x0F, - 0x80, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x01, 0xF0, 0x03, 0xE0, 0x07, 0xC0, - 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8, 0x01, 0xF0, 0x03, - 0xE0, 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0xF8, - 0x03, 0xE0, 0x7F, 0xC0, 0xFF, 0x01, 0xFE, 0x03, 0xF0, 0x00, 0x02, 0x00, - 0x00, 0x03, 0xF8, 0x00, 0x00, 0xFF, 0xC0, 0x03, 0xBF, 0xFC, 0x00, 0x77, - 0xFF, 0xE0, 0x1F, 0xE0, 0xFF, 0x03, 0xFC, 0x07, 0xF8, 0xF7, 0x00, 0x7F, - 0xFE, 0xE0, 0x03, 0xFF, 0xDC, 0x00, 0x3F, 0xF0, 0x00, 0x01, 0xF8, 0x00 -}; - -static const GFXglyph FreeSans32pt7bGlyphs[] = { - { 0, 0, 0, 18, 0, 1 } // ' ' - ,{ 0, 5, 46, 18, 8, -45 } // '!' - ,{ 29, 16, 16, 22, 3, -44 } // '"' - ,{ 61, 33, 45, 35, 1, -43 } // '#' - ,{ 247, 31, 57, 35, 2, -48 } // '$' - ,{ 468, 52, 46, 56, 2, -44 } // '%' - ,{ 767, 37, 46, 42, 3, -44 } // '&' - ,{ 980, 6, 16, 12, 3, -44 } // ''' - ,{ 992, 13, 59, 21, 5, -45 } // '(' - ,{ 1088, 14, 59, 21, 2, -45 } // ')' - ,{ 1192, 19, 18, 25, 3, -45 } // '*' - ,{ 1235, 31, 31, 37, 3, -29 } // '+' - ,{ 1356, 7, 16, 18, 5, -6 } // ',' - ,{ 1370, 15, 5, 21, 3, -19 } // '-' - ,{ 1380, 7, 7, 18, 5, -6 } // '.' - ,{ 1387, 18, 47, 18, 0, -45 } // '/' - ,{ 1493, 29, 46, 35, 3, -44 } // '0' - ,{ 1660, 16, 46, 35, 6, -44 } // '1' - ,{ 1752, 30, 46, 35, 2, -44 } // '2' - ,{ 1925, 30, 46, 35, 2, -44 } // '3' - ,{ 2098, 31, 46, 35, 2, -44 } // '4' - ,{ 2277, 30, 46, 35, 2, -44 } // '5' - ,{ 2450, 29, 46, 35, 3, -44 } // '6' - ,{ 2617, 30, 46, 35, 3, -44 } // '7' - ,{ 2790, 30, 46, 35, 2, -44 } // '8' - ,{ 2963, 30, 46, 35, 2, -44 } // '9' - ,{ 3136, 6, 33, 18, 7, -32 } // ':' - ,{ 3161, 7, 42, 18, 7, -32 } // ';' - ,{ 3198, 31, 31, 37, 3, -29 } // '<' - ,{ 3319, 31, 15, 37, 3, -21 } // '=' - ,{ 3378, 31, 31, 37, 3, -29 } // '>' - ,{ 3499, 27, 47, 35, 5, -46 } // '?' - ,{ 3658, 58, 56, 64, 2, -46 } // '@' - ,{ 4064, 40, 46, 42, 1, -45 } // 'A' - ,{ 4294, 34, 46, 42, 5, -45 } // 'B' - ,{ 4490, 40, 48, 45, 3, -46 } // 'C' - ,{ 4730, 36, 46, 45, 6, -45 } // 'D' - ,{ 4937, 33, 46, 42, 6, -45 } // 'E' - ,{ 5127, 30, 46, 39, 6, -45 } // 'F' - ,{ 5300, 42, 48, 49, 3, -46 } // 'G' - ,{ 5552, 36, 46, 45, 5, -45 } // 'H' - ,{ 5759, 6, 46, 18, 6, -45 } // 'I' - ,{ 5794, 26, 47, 32, 1, -45 } // 'J' - ,{ 5947, 36, 46, 42, 5, -45 } // 'K' - ,{ 6154, 29, 46, 35, 5, -45 } // 'L' - ,{ 6321, 43, 46, 52, 5, -45 } // 'M' - ,{ 6569, 36, 46, 45, 5, -45 } // 'N' - ,{ 6776, 45, 48, 49, 2, -46 } // 'O' - ,{ 7046, 33, 46, 42, 6, -45 } // 'P' - ,{ 7236, 45, 51, 49, 2, -46 } // 'Q' - ,{ 7523, 37, 46, 45, 6, -45 } // 'R' - ,{ 7736, 36, 48, 42, 3, -46 } // 'S' - ,{ 7952, 36, 46, 39, 1, -45 } // 'T' - ,{ 8159, 36, 47, 45, 5, -45 } // 'U' - ,{ 8371, 39, 46, 42, 2, -45 } // 'V' - ,{ 8596, 58, 46, 59, 1, -45 } // 'W' - ,{ 8930, 40, 46, 42, 1, -45 } // 'X' - ,{ 9160, 41, 46, 42, 1, -45 } // 'Y' - ,{ 9396, 35, 46, 39, 2, -45 } // 'Z' - ,{ 9598, 12, 59, 18, 4, -45 } // '[' - ,{ 9687, 18, 47, 18, 0, -45 } // '\' - ,{ 9793, 12, 59, 17, 1, -45 } // ']' - ,{ 9882, 24, 24, 30, 3, -44 } // '^' - ,{ 9954, 37, 3, 35, -1, 9 } // '_' - ,{ 9968, 14, 10, 21, 1, -46 } // '`' - ,{ 9986, 31, 35, 35, 3, -33 } // 'a' - ,{ 10122, 30, 47, 35, 3, -45 } // 'b' - ,{ 10299, 28, 35, 32, 2, -33 } // 'c' - ,{ 10422, 29, 47, 35, 2, -45 } // 'd' - ,{ 10593, 29, 35, 35, 3, -33 } // 'e' - ,{ 10720, 15, 46, 18, 1, -45 } // 'f' - ,{ 10807, 29, 48, 35, 2, -33 } // 'g' - ,{ 10981, 27, 46, 35, 4, -45 } // 'h' - ,{ 11137, 5, 46, 14, 4, -45 } // 'i' - ,{ 11166, 11, 60, 14, -1, -45 } // 'j' - ,{ 11249, 28, 46, 32, 4, -45 } // 'k' - ,{ 11410, 6, 46, 14, 4, -45 } // 'l' - ,{ 11445, 44, 34, 52, 4, -33 } // 'm' - ,{ 11632, 27, 34, 35, 4, -33 } // 'n' - ,{ 11747, 30, 35, 35, 2, -33 } // 'o' - ,{ 11879, 30, 48, 35, 3, -33 } // 'p' - ,{ 12059, 29, 48, 35, 2, -33 } // 'q' - ,{ 12233, 16, 34, 21, 4, -33 } // 'r' - ,{ 12301, 27, 35, 32, 2, -33 } // 's' - ,{ 12420, 15, 43, 18, 1, -41 } // 't' - ,{ 12501, 26, 34, 35, 4, -32 } // 'u' - ,{ 12612, 30, 33, 32, 1, -32 } // 'v' - ,{ 12736, 45, 33, 45, 0, -32 } // 'w' - ,{ 12922, 29, 33, 32, 1, -32 } // 'x' - ,{ 13042, 29, 47, 32, 1, -32 } // 'y' - ,{ 13213, 27, 33, 32, 2, -32 } // 'z' - ,{ 13325, 14, 59, 21, 3, -45 } // '{' - ,{ 13429, 4, 59, 16, 6, -45 } // '|' - ,{ 13459, 15, 59, 21, 2, -45 } // '}' - ,{ 13570, 27, 11, 37, 5, -27 } // '~' -}; - -static const GFXfont FreeSans32pt7b = { - (uint8_t *)FreeSans32pt7bBitmaps, - (GFXglyph *)FreeSans32pt7bGlyphs, 0x20, 0x7e, 88 }; - - -static const uint8_t Quito36pt7bBitmaps[] = { - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, - 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x3E, 0x3C, 0x3C, 0x3C, - 0x3C, 0x3C, 0x3C, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xC1, 0xFF, 0xF8, 0x3F, 0xFF, 0x07, - 0xFF, 0xE0, 0xFF, 0xFC, 0x1F, 0xFF, 0x83, 0xFF, 0xF0, 0x7F, 0xFE, 0x0F, - 0xFF, 0xC1, 0xFD, 0xF8, 0x3F, 0xBF, 0x07, 0xE7, 0xE0, 0xFC, 0xFC, 0x0F, - 0x9F, 0x01, 0xF1, 0xE0, 0x3E, 0x3C, 0x07, 0x87, 0x80, 0xF0, 0x00, 0x07, - 0xC0, 0x07, 0xE0, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x00, 0x7C, 0x00, 0x7C, - 0x00, 0x01, 0xF0, 0x01, 0xF0, 0x00, 0x0F, 0xC0, 0x0F, 0xC0, 0x00, 0x3E, - 0x00, 0x3E, 0x00, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0x03, 0xE0, 0x03, 0xE0, - 0x00, 0x1F, 0x80, 0x0F, 0x80, 0x00, 0x7C, 0x00, 0x7E, 0x00, 0x01, 0xF0, - 0x01, 0xF0, 0x00, 0x07, 0xC0, 0x07, 0xC0, 0x00, 0x1F, 0x00, 0x1F, 0x00, - 0x00, 0xFC, 0x00, 0x7C, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7C, 0x00, - 0x7C, 0x00, 0x01, 0xF0, 0x01, 0xF0, 0x00, 0x07, 0xC0, 0x07, 0xC0, 0x00, - 0x3F, 0x00, 0x3F, 0x00, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0x03, 0xE0, 0x03, - 0xE0, 0x00, 0x0F, 0x80, 0x0F, 0x80, 0x00, 0x7E, 0x00, 0x3E, 0x00, 0x01, - 0xF0, 0x01, 0xF8, 0x00, 0x07, 0xC0, 0x07, 0xC0, 0x00, 0x1F, 0x00, 0x1F, - 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x1F, 0x80, 0x0F, 0x80, 0x00, 0x7C, - 0x00, 0x7E, 0x00, 0x01, 0xF0, 0x01, 0xF0, 0x00, 0x07, 0xC0, 0x07, 0xC0, - 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0x03, 0xE0, - 0x03, 0xE0, 0x00, 0x0F, 0x80, 0x0F, 0x80, 0x00, 0x3E, 0x00, 0x3E, 0x00, - 0x00, 0xF8, 0x00, 0xF8, 0x00, 0x07, 0xE0, 0x07, 0xE0, 0x00, 0x1F, 0x00, - 0x1F, 0x00, 0x00, 0x7C, 0x00, 0x7C, 0x00, 0x01, 0xF0, 0x01, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xCF, - 0xC0, 0x00, 0x00, 0x00, 0x0F, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x7F, - 0xC0, 0xFC, 0x00, 0x00, 0x00, 0x03, 0xFE, 0x03, 0xF0, 0x00, 0x00, 0x00, - 0x1F, 0xE0, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x3F, 0x00, 0x00, - 0x00, 0x03, 0xF8, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x03, 0xF0, - 0x00, 0x00, 0x00, 0x7F, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x01, 0xF8, 0x00, - 0x3F, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x3F, - 0x80, 0x03, 0xF0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0xFC, 0x00, - 0x00, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x1F, 0x80, - 0x00, 0xFC, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x01, - 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x00, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x0F, 0xE0, 0x00, 0x3F, 0x00, 0x03, 0xF1, - 0xFF, 0xF0, 0x00, 0xFC, 0x00, 0x0F, 0xDF, 0xFF, 0xE0, 0x03, 0xF0, 0x00, - 0x3F, 0xFF, 0xFF, 0xE0, 0x0F, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0xC0, 0x1F, - 0x80, 0x03, 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, - 0x00, 0xFE, 0x00, 0x3F, 0xF8, 0x07, 0xFC, 0x03, 0xF8, 0x00, 0xFF, 0xC0, - 0x07, 0xF8, 0x07, 0xF0, 0x03, 0xFE, 0x00, 0x0F, 0xE0, 0x1F, 0xE0, 0x0F, - 0xF0, 0x00, 0x1F, 0x80, 0x3F, 0xC0, 0x3F, 0xC0, 0x00, 0x7F, 0x00, 0x7F, - 0xC0, 0xFE, 0x00, 0x00, 0xFC, 0x01, 0xFF, 0x83, 0xF8, 0x00, 0x03, 0xF0, - 0x03, 0xFF, 0xCF, 0xE0, 0x00, 0x0F, 0xC0, 0x07, 0xFF, 0xFF, 0x80, 0x00, - 0x3F, 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x00, 0xFC, 0x00, 0x0F, 0xFF, 0xF8, - 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x0F, - 0xFF, 0xC0, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x03, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0xFF, - 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x07, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0xFF, - 0xFF, 0xE0, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x0F, - 0xFF, 0xFF, 0xF8, 0x1F, 0x00, 0x00, 0x3F, 0x7F, 0xFF, 0x80, 0x7C, 0x00, - 0x00, 0xFC, 0x7F, 0xFC, 0x03, 0xF8, 0x00, 0x03, 0xF0, 0x7F, 0xE0, 0x07, - 0xF0, 0x00, 0x0F, 0xC0, 0x3F, 0x80, 0x1F, 0xE0, 0x00, 0x3F, 0x01, 0xFC, - 0x00, 0x3F, 0xC0, 0x00, 0xFC, 0x0F, 0xF0, 0x00, 0xFF, 0x80, 0x03, 0xF0, - 0x7F, 0x80, 0x01, 0xFF, 0x00, 0x0F, 0xC3, 0xFC, 0x00, 0x03, 0xFE, 0x00, - 0x3F, 0x3F, 0xF0, 0x00, 0x07, 0xFF, 0x00, 0xFF, 0xFF, 0x80, 0x00, 0x0F, - 0xFF, 0x83, 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, - 0x00, 0x3F, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, - 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x01, - 0xF0, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x3F, 0xFF, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x3E, 0x00, 0x03, 0xF8, - 0x7F, 0x00, 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x7E, 0x00, 0x01, 0xF0, 0x00, - 0x1F, 0x80, 0x7E, 0x00, 0x07, 0xC0, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0x0F, - 0x80, 0x00, 0x7C, 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x01, 0xF8, 0x01, 0xF0, - 0x00, 0x7C, 0x00, 0x03, 0xF0, 0x03, 0xF0, 0x01, 0xF0, 0x00, 0x07, 0xE0, - 0x07, 0xE0, 0x03, 0xE0, 0x00, 0x0F, 0xC0, 0x0F, 0xC0, 0x0F, 0x80, 0x00, - 0x1F, 0x80, 0x1F, 0x80, 0x1F, 0x00, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x7C, - 0x00, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0xFC, - 0x03, 0xE0, 0x00, 0x01, 0xF8, 0x01, 0xF8, 0x07, 0xC0, 0x00, 0x01, 0xF0, - 0x03, 0xE0, 0x1F, 0x00, 0x00, 0x03, 0xE0, 0x07, 0xC0, 0x3E, 0x00, 0x00, - 0x07, 0xE0, 0x1F, 0x80, 0xF8, 0x00, 0x00, 0x07, 0xE0, 0x7E, 0x01, 0xF0, - 0x00, 0x00, 0x0F, 0xE1, 0xFC, 0x07, 0xC0, 0x00, 0x00, 0x0F, 0xFF, 0xF0, - 0x1F, 0x80, 0x00, 0x00, 0x0F, 0xFF, 0xC0, 0x3E, 0x00, 0x00, 0x00, 0x0F, - 0xFE, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x01, 0xF0, 0x03, 0xF8, - 0x00, 0x00, 0x00, 0x07, 0xE0, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0x80, - 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x3E, 0x01, 0xFF, 0xFE, 0x00, 0x00, 0x00, - 0x7C, 0x07, 0xF0, 0xFC, 0x00, 0x00, 0x01, 0xF0, 0x0F, 0x80, 0xFC, 0x00, - 0x00, 0x03, 0xE0, 0x3F, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0x80, 0x7C, 0x01, - 0xF8, 0x00, 0x00, 0x1F, 0x00, 0xF8, 0x01, 0xF0, 0x00, 0x00, 0x7C, 0x03, - 0xF0, 0x03, 0xE0, 0x00, 0x00, 0xF8, 0x07, 0xE0, 0x07, 0xE0, 0x00, 0x03, - 0xE0, 0x0F, 0xC0, 0x0F, 0xC0, 0x00, 0x07, 0xC0, 0x1F, 0x00, 0x1F, 0x80, - 0x00, 0x1F, 0x00, 0x3E, 0x00, 0x3F, 0x00, 0x00, 0x3E, 0x00, 0x7C, 0x00, - 0x7E, 0x00, 0x00, 0xF8, 0x00, 0xF8, 0x00, 0xFC, 0x00, 0x01, 0xF0, 0x01, - 0xF8, 0x01, 0xF8, 0x00, 0x07, 0xC0, 0x03, 0xF0, 0x03, 0xE0, 0x00, 0x1F, - 0x80, 0x03, 0xE0, 0x07, 0xC0, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x1F, 0x80, - 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x3F, 0x00, 0x01, 0xF0, 0x00, 0x0F, 0x80, - 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x1F, 0xC3, 0xF0, 0x00, 0x0F, 0x80, 0x00, - 0x1F, 0xFF, 0xE0, 0x00, 0x3E, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x7C, - 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x0F, 0xE0, 0x00, - 0x00, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x00, - 0x7F, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, - 0xFF, 0x80, 0x00, 0x01, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xC1, 0xFF, - 0x00, 0x00, 0x0F, 0xF0, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0xFE, 0x00, - 0x00, 0x3F, 0x00, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, 0x03, 0xF8, 0x00, 0x01, - 0xFC, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0x80, 0x0F, 0xE0, 0x00, 0x03, 0xF0, - 0x01, 0xFC, 0x00, 0x00, 0x7F, 0x00, 0x3F, 0x00, 0x00, 0x0F, 0xE0, 0x0F, - 0xE0, 0x00, 0x00, 0xFE, 0x01, 0xF8, 0x00, 0x00, 0x1F, 0xE0, 0x7F, 0x00, - 0x00, 0x01, 0xFE, 0x1F, 0xC0, 0x00, 0x00, 0x3F, 0xEF, 0xF0, 0x00, 0x00, - 0x03, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x00, 0x03, - 0xFF, 0x80, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x7F, 0xFC, - 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x00, 0x0F, 0xFF, 0xF8, 0x00, - 0x00, 0x03, 0xFE, 0x7F, 0x80, 0x00, 0x00, 0xFF, 0x87, 0xF8, 0x04, 0x00, - 0x3F, 0xC0, 0xFF, 0x81, 0xFC, 0x0F, 0xF0, 0x0F, 0xF8, 0x3F, 0x81, 0xFC, - 0x00, 0xFF, 0x07, 0xF0, 0x7F, 0x00, 0x0F, 0xF0, 0xFC, 0x0F, 0xE0, 0x00, - 0xFF, 0x3F, 0x83, 0xF8, 0x00, 0x0F, 0xF7, 0xF0, 0x7F, 0x00, 0x01, 0xFF, - 0xFC, 0x0F, 0xE0, 0x00, 0x1F, 0xFF, 0x81, 0xFC, 0x00, 0x01, 0xFF, 0xE0, - 0x3F, 0x80, 0x00, 0x1F, 0xFC, 0x07, 0xF0, 0x00, 0x01, 0xFF, 0x00, 0xFE, - 0x00, 0x00, 0x3F, 0xE0, 0x1F, 0xE0, 0x00, 0x07, 0xFE, 0x01, 0xFC, 0x00, - 0x00, 0xFF, 0xE0, 0x3F, 0xC0, 0x00, 0x3F, 0xFE, 0x03, 0xFC, 0x00, 0x1F, - 0xFF, 0xE0, 0x7F, 0xC0, 0x07, 0xFF, 0xFE, 0x07, 0xFE, 0x07, 0xFF, 0x7F, - 0xE0, 0x7F, 0xFF, 0xFF, 0xC7, 0xFE, 0x0F, 0xFF, 0xFF, 0xF0, 0x7F, 0xC0, - 0x7F, 0xFF, 0xFC, 0x07, 0xF8, 0x07, 0xFF, 0xFE, 0x00, 0x7E, 0x00, 0x3F, - 0xFF, 0x00, 0x07, 0x80, 0x00, 0xFF, 0x00, 0x00, 0x20, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xF7, 0xEF, 0x9F, 0x3E, 0x7C, - 0x78, 0x00, 0x0F, 0x80, 0x0F, 0x80, 0x07, 0xC0, 0x07, 0xC0, 0x07, 0xC0, - 0x03, 0xE0, 0x03, 0xE0, 0x01, 0xF0, 0x01, 0xF0, 0x01, 0xF8, 0x00, 0xF8, - 0x00, 0xFC, 0x00, 0x7C, 0x00, 0x7E, 0x00, 0x3F, 0x00, 0x1F, 0x00, 0x1F, - 0x80, 0x0F, 0xC0, 0x0F, 0xE0, 0x07, 0xE0, 0x03, 0xF0, 0x01, 0xF8, 0x01, - 0xFC, 0x00, 0xFC, 0x00, 0x7E, 0x00, 0x3F, 0x00, 0x1F, 0x80, 0x0F, 0xC0, - 0x0F, 0xE0, 0x07, 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, - 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x0F, 0xE0, 0x03, 0xF0, 0x01, 0xF8, 0x00, - 0xFC, 0x00, 0x7E, 0x00, 0x3F, 0x00, 0x1F, 0xC0, 0x07, 0xE0, 0x03, 0xF0, - 0x01, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x03, - 0xF0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x3F, 0x00, 0x0F, 0x80, 0x07, 0xE0, - 0x01, 0xF0, 0x00, 0xFC, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x01, - 0xF0, 0x00, 0x7C, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x78, 0x00, 0x3E, 0x00, - 0x0F, 0x80, 0x07, 0xC0, 0x01, 0xF0, 0x00, 0xFC, 0x00, 0x3E, 0x00, 0x0F, - 0x80, 0x07, 0xC0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0x00, - 0x0F, 0xC0, 0x03, 0xE0, 0x01, 0xF8, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x1F, - 0x80, 0x0F, 0xC0, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0xFC, 0x00, 0x7E, 0x00, - 0x3F, 0x00, 0x1F, 0xC0, 0x0F, 0xE0, 0x07, 0xF0, 0x01, 0xF8, 0x00, 0xFC, - 0x00, 0x7E, 0x00, 0x3F, 0x00, 0x1F, 0x80, 0x0F, 0xC0, 0x07, 0xE0, 0x03, - 0xF0, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x3F, 0x00, - 0x1F, 0x80, 0x0F, 0xC0, 0x0F, 0xE0, 0x07, 0xE0, 0x03, 0xF0, 0x01, 0xF8, - 0x01, 0xFC, 0x00, 0xFC, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x3F, 0x00, 0x1F, - 0x00, 0x1F, 0x80, 0x0F, 0x80, 0x0F, 0xC0, 0x07, 0xC0, 0x03, 0xE0, 0x03, - 0xE0, 0x03, 0xF0, 0x01, 0xF0, 0x01, 0xF0, 0x00, 0xF8, 0x00, 0xF8, 0x00, - 0x78, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0xF8, 0x00, 0x01, 0xF0, 0x00, - 0x03, 0xE0, 0x00, 0x07, 0xC0, 0x04, 0x07, 0x80, 0x9E, 0x0F, 0x0F, 0x3F, - 0x9C, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xF0, 0x1F, - 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0x3F, 0xE0, 0x00, 0xFB, 0xE0, 0x01, 0xF7, - 0xE0, 0x07, 0xC7, 0xE0, 0x1F, 0x8F, 0xC0, 0x7E, 0x0F, 0xC0, 0x7C, 0x0F, - 0x80, 0x70, 0x1C, 0x00, 0x40, 0x10, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, - 0x00, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, - 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x03, - 0xF0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x03, 0xF0, 0x00, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x0F, 0xC0, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0x03, 0xF0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xC3, 0x87, 0x0E, 0x3C, 0x78, 0xF3, 0xCF, 0xBE, 0x38, 0x60, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x01, 0xF0, 0x00, - 0x3E, 0x00, 0x03, 0xE0, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0x7C, 0x00, - 0x07, 0xC0, 0x00, 0x7C, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x0F, 0x80, - 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x03, 0xE0, - 0x00, 0x3E, 0x00, 0x03, 0xE0, 0x00, 0x7C, 0x00, 0x07, 0xC0, 0x00, 0x7C, - 0x00, 0x07, 0xC0, 0x00, 0xF8, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x1F, - 0x00, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x03, 0xF0, 0x00, 0x3E, 0x00, 0x03, - 0xE0, 0x00, 0x3E, 0x00, 0x07, 0xC0, 0x00, 0x7C, 0x00, 0x07, 0xC0, 0x00, - 0xFC, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x0F, 0x80, 0x01, 0xF0, 0x00, - 0x1F, 0x00, 0x01, 0xF0, 0x00, 0x3E, 0x00, 0x03, 0xE0, 0x00, 0x3E, 0x00, - 0x03, 0xE0, 0x00, 0x7C, 0x00, 0x07, 0xC0, 0x00, 0x7C, 0x00, 0x0F, 0x80, - 0x00, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xFF, 0x00, - 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xFE, - 0x00, 0x3F, 0xFF, 0xFF, 0x80, 0x3F, 0xE0, 0x7F, 0xE0, 0x1F, 0xE0, 0x0F, - 0xF0, 0x1F, 0xC0, 0x03, 0xFC, 0x0F, 0xE0, 0x00, 0xFE, 0x0F, 0xE0, 0x00, - 0x3F, 0x87, 0xE0, 0x00, 0x0F, 0xC7, 0xF0, 0x00, 0x07, 0xF3, 0xF8, 0x00, - 0x03, 0xF9, 0xF8, 0x00, 0x00, 0xFC, 0xFC, 0x00, 0x00, 0x7E, 0x7E, 0x00, - 0x00, 0x3F, 0x7F, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xC0, - 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0xFF, 0xF0, - 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x1F, 0xFE, - 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x03, 0xFF, - 0xC0, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x7F, - 0xFC, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x1F, - 0xFF, 0x80, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0x07, 0xE7, 0xE0, 0x00, 0x03, - 0xF3, 0xF0, 0x00, 0x01, 0xF9, 0xFC, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x00, - 0xFE, 0x3F, 0x00, 0x00, 0x7E, 0x1F, 0xC0, 0x00, 0x7F, 0x07, 0xF0, 0x00, - 0x7F, 0x03, 0xFC, 0x00, 0x7F, 0x81, 0xFF, 0x00, 0x7F, 0x80, 0x7F, 0xE0, - 0xFF, 0xC0, 0x1F, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, - 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x01, - 0xFF, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x7C, 0x00, 0x3F, - 0x00, 0x1F, 0xC0, 0x0F, 0xF0, 0x07, 0xFC, 0x03, 0xFF, 0x01, 0xFF, 0xC1, - 0xFF, 0xF0, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xF3, 0xFF, 0xF0, - 0xFF, 0xF0, 0x3F, 0xF8, 0x0F, 0xF8, 0x03, 0xF8, 0x00, 0xFC, 0x00, 0x3F, - 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, - 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, - 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, - 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, - 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, - 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x07, - 0xFC, 0x00, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xFE, 0x00, 0x0F, - 0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0xFC, 0x03, 0xFF, 0xFF, 0xFF, 0x80, - 0xFF, 0xC0, 0x7F, 0xE0, 0x7F, 0xC0, 0x07, 0xFC, 0x1F, 0xC0, 0x00, 0x7F, - 0x0F, 0xE0, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x03, 0xF8, 0xFC, 0x00, 0x00, - 0x7E, 0x7F, 0x00, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x07, 0xF0, 0x70, 0x00, - 0x01, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, - 0x00, 0x07, 0xE0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x01, 0xFE, - 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x3F, - 0xC0, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x0F, - 0xF8, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x01, - 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, - 0x7F, 0xC0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, - 0x07, 0xF8, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, - 0x00, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x1F, 0xFF, 0xFF, - 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, - 0x0F, 0xF0, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xE0, 0x00, - 0x7F, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0x80, - 0x7F, 0xE0, 0x7F, 0xE0, 0x7F, 0xC0, 0x0F, 0xF0, 0x3F, 0x80, 0x03, 0xFC, - 0x1F, 0xC0, 0x00, 0xFE, 0x1F, 0xC0, 0x00, 0x3F, 0x0F, 0xE0, 0x00, 0x1F, - 0xC7, 0xE0, 0x00, 0x0F, 0xE0, 0x70, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x03, - 0xF8, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x03, - 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x0F, - 0xFF, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0xFC, 0x00, 0x03, - 0x87, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x1F, 0xE0, 0x00, - 0x00, 0x07, 0xF8, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x07, 0xE0, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x01, 0xF8, 0xE0, 0x00, 0x01, 0xFF, - 0xF8, 0x00, 0x00, 0xFF, 0xFC, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x3F, - 0xBF, 0x80, 0x00, 0x3F, 0x9F, 0xE0, 0x00, 0x3F, 0xCF, 0xF0, 0x00, 0x3F, - 0xC3, 0xFE, 0x00, 0x3F, 0xE0, 0xFF, 0xC0, 0x7F, 0xE0, 0x7F, 0xFF, 0xFF, - 0xE0, 0x1F, 0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, - 0xE0, 0x00, 0x1F, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xF0, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, - 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0xE0, - 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x00, 0x7F, - 0xF0, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, - 0xFD, 0xF8, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x0F, 0xC7, 0xE0, 0x00, - 0x01, 0xF8, 0xFC, 0x00, 0x00, 0x7E, 0x1F, 0x80, 0x00, 0x1F, 0x83, 0xF0, - 0x00, 0x07, 0xF0, 0x7E, 0x00, 0x00, 0xFC, 0x0F, 0xC0, 0x00, 0x3F, 0x01, - 0xF8, 0x00, 0x0F, 0xC0, 0x3F, 0x00, 0x03, 0xF8, 0x07, 0xE0, 0x00, 0x7E, - 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x1F, 0x80, 0x07, 0xE0, 0x03, 0xF0, 0x00, - 0xFC, 0x00, 0x7E, 0x00, 0x3F, 0x00, 0x0F, 0xC0, 0x0F, 0xC0, 0x01, 0xF8, - 0x03, 0xF8, 0x00, 0x3F, 0x00, 0x7E, 0x00, 0x07, 0xE0, 0x1F, 0x80, 0x00, - 0xFC, 0x07, 0xE0, 0x00, 0x1F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, - 0x7E, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, - 0x00, 0x3F, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x7E, - 0x00, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, - 0xFF, 0xE0, 0x1F, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, - 0xFF, 0xFF, 0x80, 0x7E, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x1F, 0x83, 0xFC, - 0x00, 0x07, 0xE7, 0xFF, 0xE0, 0x03, 0xF3, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, - 0xFF, 0xC0, 0x3F, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, - 0x80, 0xFF, 0xE0, 0xFF, 0x80, 0x0F, 0xF8, 0x7F, 0x80, 0x01, 0xFF, 0x1F, - 0xC0, 0x00, 0x3F, 0xC0, 0xE0, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, - 0x07, 0xF0, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, - 0x00, 0x1F, 0xBF, 0x80, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x03, 0xFB, 0xF8, - 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x3F, 0xC7, - 0xF8, 0x00, 0x1F, 0xE0, 0xFF, 0x80, 0x0F, 0xF8, 0x1F, 0xF8, 0x0F, 0xFC, - 0x07, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xFF, - 0x80, 0x01, 0xFF, 0xFF, 0xC0, 0x00, 0x1F, 0xFF, 0xC0, 0x00, 0x00, 0xFF, - 0x80, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x1F, - 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xFF, 0x80, 0x3F, - 0xFF, 0xFF, 0xE0, 0x1F, 0xF0, 0x1F, 0xF0, 0x1F, 0xE0, 0x03, 0xFC, 0x1F, - 0xE0, 0x00, 0xFE, 0x0F, 0xE0, 0x00, 0x3F, 0x8F, 0xE0, 0x00, 0x1F, 0xC7, - 0xF0, 0x00, 0x07, 0xE3, 0xF0, 0x00, 0x03, 0xF3, 0xF8, 0x00, 0x00, 0x01, - 0xF8, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, - 0x7E, 0x00, 0x00, 0x00, 0x3F, 0x00, 0xFF, 0x00, 0x1F, 0x81, 0xFF, 0xF0, - 0x0F, 0xC3, 0xFF, 0xFC, 0x07, 0xE3, 0xFF, 0xFF, 0x83, 0xF3, 0xFF, 0xFF, - 0xE1, 0xFB, 0xFF, 0xFF, 0xF8, 0xFF, 0xFC, 0x0F, 0xFC, 0x7F, 0xF8, 0x01, - 0xFF, 0x3F, 0xF0, 0x00, 0x3F, 0xDF, 0xF0, 0x00, 0x0F, 0xEF, 0xF0, 0x00, - 0x07, 0xF7, 0xF8, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x00, 0xFF, 0xFC, 0x00, - 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x0F, 0xFF, 0x80, - 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x01, 0xFB, 0xF0, - 0x00, 0x00, 0xFD, 0xF8, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x7F, 0x7F, - 0x00, 0x00, 0x3F, 0x1F, 0xC0, 0x00, 0x3F, 0x8F, 0xF0, 0x00, 0x3F, 0xC3, - 0xFC, 0x00, 0x3F, 0xC1, 0xFF, 0x00, 0x3F, 0xE0, 0x7F, 0xE0, 0x7F, 0xE0, - 0x1F, 0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xE0, - 0x00, 0x7F, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0x00, - 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFC, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, - 0x01, 0xFC, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, - 0x00, 0x3F, 0x80, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x1F, 0xC0, 0x00, - 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x07, 0xF0, 0x00, - 0x00, 0x07, 0xF0, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x3F, 0x80, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x03, 0xF8, - 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x03, - 0xF0, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0x80, - 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xFF, - 0x00, 0x7F, 0xFF, 0xFF, 0xC0, 0x3F, 0xE0, 0x3F, 0xE0, 0x3F, 0xC0, 0x07, - 0xF8, 0x1F, 0xC0, 0x01, 0xFC, 0x1F, 0xC0, 0x00, 0x7F, 0x0F, 0xE0, 0x00, - 0x3F, 0x87, 0xE0, 0x00, 0x0F, 0xC3, 0xF0, 0x00, 0x07, 0xE1, 0xF8, 0x00, - 0x03, 0xF0, 0xFC, 0x00, 0x01, 0xF8, 0x7F, 0x00, 0x01, 0xFC, 0x1F, 0x80, - 0x00, 0xFE, 0x0F, 0xE0, 0x00, 0xFE, 0x03, 0xF8, 0x00, 0xFF, 0x01, 0xFF, - 0x01, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0x00, 0x01, - 0xFF, 0xFE, 0x00, 0x01, 0xFF, 0xFF, 0x00, 0x03, 0xFF, 0xFF, 0xE0, 0x07, - 0xFF, 0xFF, 0xFC, 0x07, 0xFE, 0x03, 0xFF, 0x07, 0xFC, 0x00, 0x7F, 0xC3, - 0xFC, 0x00, 0x0F, 0xE3, 0xFC, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x01, 0xFD, - 0xFC, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x0F, - 0xFF, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x01, - 0xFF, 0xE0, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, - 0x7F, 0xFE, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x00, 0x3F, 0xDF, 0xE0, 0x00, - 0x1F, 0xC7, 0xF8, 0x00, 0x1F, 0xE3, 0xFE, 0x00, 0x3F, 0xE0, 0xFF, 0xC0, - 0x7F, 0xE0, 0x3F, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, - 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0x1F, 0xFF, 0xC0, 0x00, 0x01, - 0xFF, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, - 0x7F, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, 0xFE, 0x00, - 0x7F, 0xFF, 0xFF, 0x80, 0x7F, 0xF0, 0x3F, 0xE0, 0x7F, 0xE0, 0x07, 0xF8, - 0x3F, 0xC0, 0x01, 0xFC, 0x3F, 0xC0, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x1F, - 0x8F, 0xE0, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x03, 0xF7, 0xF0, 0x00, 0x01, - 0xFB, 0xF8, 0x00, 0x00, 0xFD, 0xF8, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, - 0x3F, 0xFE, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, - 0x07, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x01, 0xFD, 0xF8, 0x00, - 0x01, 0xFE, 0xFE, 0x00, 0x00, 0xFF, 0x7F, 0x80, 0x00, 0xFF, 0x9F, 0xE0, - 0x00, 0xFF, 0xCF, 0xF8, 0x00, 0xFF, 0xE3, 0xFF, 0x01, 0xFF, 0xF1, 0xFF, - 0xFF, 0xFD, 0xF8, 0x7F, 0xFF, 0xFC, 0xFC, 0x1F, 0xFF, 0xFC, 0x7E, 0x03, - 0xFF, 0xFC, 0x3F, 0x00, 0xFF, 0xF8, 0x1F, 0x80, 0x0F, 0xF0, 0x0F, 0xC0, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x03, 0xF0, - 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x01, 0xFC, 0xFC, 0x00, 0x00, 0xFC, - 0x7E, 0x00, 0x00, 0xFE, 0x3F, 0x80, 0x00, 0x7F, 0x0F, 0xC0, 0x00, 0x7F, - 0x07, 0xF0, 0x00, 0x7F, 0x83, 0xFC, 0x00, 0x7F, 0x80, 0xFF, 0x80, 0xFF, - 0x80, 0x3F, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, - 0xC0, 0x00, 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x03, 0xFC, - 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE1, - 0xC3, 0x87, 0x1E, 0x3C, 0x79, 0xE7, 0xDF, 0x1C, 0x30, 0x00, 0x00, 0x00, - 0x00, 0xC0, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0x01, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0xF0, 0x00, - 0x03, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xE0, 0x00, - 0x07, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0xC0, 0x00, - 0x1F, 0xFF, 0x80, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, - 0x03, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, - 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0xFF, - 0x80, 0x00, 0x00, 0xFF, 0xFC, 0x00, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x00, - 0x7F, 0xFE, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x3F, 0xFF, 0x00, - 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x01, 0xFF, - 0xC0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0x0F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xF0, 0x80, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, - 0x0F, 0xC0, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, - 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xFF, - 0x00, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x01, - 0xFF, 0xF8, 0x00, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xFC, 0x00, - 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x03, 0xFF, - 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x7F, - 0xFC, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0xFF, 0xFC, 0x00, 0x00, 0xFF, - 0xFC, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x03, 0xFF, - 0xF0, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0x03, 0xFF, - 0xE0, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0x80, 0x00, 0x7F, 0xFF, - 0xF0, 0x00, 0x7F, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, - 0xFF, 0xE0, 0x7F, 0xE0, 0x3F, 0xF0, 0x7F, 0xC0, 0x07, 0xFC, 0x3F, 0xC0, - 0x01, 0xFF, 0x3F, 0xC0, 0x00, 0x7F, 0x9F, 0xC0, 0x00, 0x1F, 0xCF, 0xE0, - 0x00, 0x07, 0xF7, 0xE0, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x01, 0xFF, 0xF8, - 0x00, 0x00, 0xFE, 0x3C, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x3F, 0x80, - 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x0F, 0xF0, - 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, - 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, - 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x03, 0xF8, - 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x3F, - 0x80, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, - 0x03, 0xF8, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, - 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, - 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFE, - 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x1F, 0xFF, 0xC0, 0x00, 0x00, 0x3F, - 0xFC, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x03, - 0xFF, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x07, - 0xFC, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0x80, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, - 0x7F, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x3F, 0x80, 0x00, 0xFC, - 0x00, 0x00, 0x3F, 0x80, 0x1F, 0xC0, 0x01, 0xFF, 0xE0, 0x7E, 0x07, 0xE0, - 0x07, 0xE0, 0x01, 0xFF, 0xFC, 0x3F, 0x80, 0xFC, 0x03, 0xF0, 0x00, 0xFF, - 0xFF, 0x8F, 0xC0, 0x3F, 0x00, 0xFC, 0x00, 0x7F, 0xFF, 0xF3, 0xF0, 0x07, - 0xC0, 0x7E, 0x00, 0x3F, 0xFF, 0xFE, 0xFC, 0x01, 0xF8, 0x1F, 0x80, 0x1F, - 0xF8, 0x3F, 0xFF, 0x00, 0x7E, 0x0F, 0xC0, 0x0F, 0xF8, 0x03, 0xFF, 0xC0, - 0x0F, 0x83, 0xF0, 0x07, 0xF8, 0x00, 0x7F, 0xE0, 0x03, 0xE0, 0xF8, 0x01, - 0xFC, 0x00, 0x0F, 0xF8, 0x00, 0xFC, 0x7E, 0x00, 0xFF, 0x00, 0x01, 0xFE, - 0x00, 0x3F, 0x1F, 0x00, 0x3F, 0x80, 0x00, 0x7F, 0x80, 0x07, 0xC7, 0xC0, - 0x1F, 0xC0, 0x00, 0x1F, 0xC0, 0x01, 0xF1, 0xF0, 0x07, 0xF0, 0x00, 0x07, - 0xF0, 0x00, 0x7C, 0xFC, 0x03, 0xF8, 0x00, 0x01, 0xFC, 0x00, 0x1F, 0x3E, - 0x00, 0xFE, 0x00, 0x00, 0x3F, 0x00, 0x07, 0xCF, 0x80, 0x3F, 0x80, 0x00, - 0x1F, 0xC0, 0x03, 0xF3, 0xE0, 0x0F, 0xC0, 0x00, 0x07, 0xE0, 0x00, 0xF8, - 0xF8, 0x07, 0xF0, 0x00, 0x01, 0xF8, 0x00, 0x3E, 0x3E, 0x01, 0xFC, 0x00, - 0x00, 0x7E, 0x00, 0x0F, 0x8F, 0x80, 0x7F, 0x00, 0x00, 0x1F, 0x80, 0x07, - 0xE3, 0xE0, 0x1F, 0xC0, 0x00, 0x0F, 0xE0, 0x01, 0xF0, 0xF8, 0x07, 0xE0, - 0x00, 0x03, 0xF0, 0x00, 0xFC, 0x3E, 0x01, 0xF8, 0x00, 0x00, 0xFC, 0x00, - 0x3F, 0x0F, 0x80, 0x7F, 0x00, 0x00, 0x7F, 0x00, 0x1F, 0x83, 0xE0, 0x1F, - 0xC0, 0x00, 0x1F, 0xC0, 0x07, 0xE0, 0xF8, 0x07, 0xF0, 0x00, 0x0F, 0xE0, - 0x03, 0xF0, 0x3F, 0x00, 0xFC, 0x00, 0x07, 0xF8, 0x01, 0xF8, 0x0F, 0xC0, - 0x3F, 0x80, 0x03, 0xFE, 0x00, 0xFE, 0x01, 0xF0, 0x0F, 0xF0, 0x01, 0xFF, - 0x80, 0x7F, 0x00, 0x7C, 0x01, 0xFE, 0x00, 0xFF, 0xE0, 0x7F, 0x80, 0x1F, - 0x80, 0x7F, 0xC0, 0xFF, 0xFC, 0x7F, 0xC0, 0x07, 0xE0, 0x0F, 0xFF, 0xFF, - 0xFF, 0xFF, 0xE0, 0x00, 0xFC, 0x01, 0xFF, 0xFF, 0xBF, 0xFF, 0xF0, 0x00, - 0x3F, 0x00, 0x3F, 0xFF, 0xC7, 0xFF, 0xF8, 0x00, 0x07, 0xE0, 0x07, 0xFF, - 0xE1, 0xFF, 0xF8, 0x00, 0x01, 0xF8, 0x00, 0xFF, 0xE0, 0x3F, 0xFC, 0x00, - 0x00, 0x3F, 0x00, 0x0F, 0xE0, 0x03, 0xF8, 0x00, 0x7E, 0x0F, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0x81, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0xC0, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x0F, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xFC, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x07, - 0xFF, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, - 0x0F, 0xFF, 0x00, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x3F, 0xFF, 0x80, 0x00, - 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x1F, 0xFF, 0xFF, - 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, - 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xFF, - 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xC0, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF3, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x3F, 0x8F, 0xC0, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x7F, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xC3, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0xC0, - 0x00, 0x00, 0x00, 0x07, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x03, - 0xF8, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x1F, - 0xC0, 0x7F, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x03, 0xF8, 0x00, 0x00, 0x00, - 0x0F, 0xE0, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x7F, 0x00, 0x00, - 0x00, 0x07, 0xF0, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x0F, 0xC0, - 0x00, 0x00, 0x01, 0xFC, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x03, - 0xF8, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x07, 0xE0, - 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x03, - 0xF8, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x7F, 0x00, 0x00, - 0x01, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x01, - 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x0F, 0xE0, 0x00, 0x03, 0xF9, 0xF8, - 0x00, 0x7F, 0x00, 0x00, 0x1F, 0xFF, 0xFC, 0x01, 0xF8, 0x00, 0x00, 0xFF, - 0xFF, 0xF8, 0x0F, 0xE0, 0x00, 0x0F, 0xFF, 0xFF, 0xE0, 0x7F, 0x00, 0x00, - 0x7F, 0xFF, 0xFF, 0x81, 0xF8, 0x00, 0x03, 0xFF, 0xFF, 0xFE, 0x0F, 0xE0, - 0x00, 0x3F, 0xFF, 0xFF, 0xF8, 0x7F, 0x00, 0x01, 0xFF, 0xC0, 0x7F, 0xE1, - 0xF8, 0x00, 0x0F, 0xF8, 0x01, 0xFF, 0x0F, 0xE0, 0x00, 0xFF, 0x80, 0x03, - 0xFC, 0x7F, 0x00, 0x07, 0xF8, 0x00, 0x0F, 0xE1, 0xF8, 0x00, 0x3F, 0x80, - 0x00, 0x7F, 0x0F, 0xE0, 0x03, 0xFC, 0x00, 0x01, 0xFC, 0x7F, 0x00, 0x1F, - 0xC0, 0x00, 0x0F, 0xE1, 0xFC, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x0F, 0xE0, - 0x0F, 0xF0, 0x00, 0x03, 0xF8, 0x3F, 0x00, 0x7F, 0x80, 0x00, 0x0F, 0xC1, - 0xFC, 0x07, 0xFC, 0x00, 0x00, 0xFE, 0x0F, 0xE0, 0x3F, 0xE0, 0x00, 0x07, - 0xF0, 0x3F, 0x01, 0xFF, 0x00, 0x00, 0x3F, 0x01, 0xFC, 0x1F, 0xFC, 0x00, - 0x03, 0xF8, 0x0F, 0xE0, 0xFF, 0xE0, 0x00, 0x1F, 0xC0, 0x3F, 0x07, 0xFF, - 0x80, 0x01, 0xFE, 0x01, 0xFC, 0x7F, 0xFE, 0x00, 0x1F, 0xE0, 0x0F, 0xE3, - 0xFF, 0xFC, 0x01, 0xFE, 0x00, 0x3F, 0x1F, 0xFF, 0xFE, 0xFF, 0xF0, 0x01, - 0xFD, 0xFC, 0xFF, 0xFF, 0xFF, 0x00, 0x0F, 0xEF, 0xE3, 0xFF, 0xFF, 0xF0, - 0x00, 0x3F, 0x7E, 0x0F, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xF0, 0x1F, 0xFF, - 0xE0, 0x00, 0x0F, 0xFF, 0x80, 0x3F, 0xFE, 0x00, 0x00, 0x3E, 0x78, 0x00, - 0x3F, 0x00, 0x00, 0x00, 0xE0, 0x30, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x07, - 0xC0, 0x0F, 0xFF, 0xE0, 0x00, 0x00, 0x3F, 0x01, 0xFF, 0xFF, 0xE0, 0x00, - 0x01, 0xF8, 0x3F, 0xFF, 0xFF, 0x80, 0x00, 0x0F, 0xC7, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x7E, 0x7F, 0xFF, 0xFF, 0xFC, 0x00, 0x03, 0xF7, 0xFF, 0xFF, - 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xF8, 0x01, 0xFF, 0xC0, 0x00, 0xFF, 0xFE, - 0x00, 0x01, 0xFF, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x07, 0xFC, 0x00, 0x3F, - 0xFC, 0x00, 0x00, 0x0F, 0xF0, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0x80, - 0x0F, 0xFC, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x07, - 0xF0, 0x03, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x1F, 0xE0, 0x00, 0x00, - 0x00, 0x7E, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x07, 0xF0, 0x00, - 0x00, 0x00, 0x1F, 0xC0, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x7E, 0x01, 0xFC, - 0x00, 0x00, 0x00, 0x03, 0xF0, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x1F, 0xC0, - 0x7E, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x07, - 0xF0, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x3F, 0x80, 0xFC, 0x00, 0x00, 0x00, - 0x01, 0xFC, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x3F, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x0F, 0xE0, - 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x7F, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x03, - 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0xFF, - 0xE0, 0xFF, 0x80, 0x00, 0x00, 0x0F, 0xFF, 0x87, 0xFE, 0x00, 0x00, 0x00, - 0x7F, 0xFC, 0x3F, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF1, 0xFF, 0xC0, 0x00, - 0x00, 0x7F, 0xBF, 0x8F, 0xFF, 0x80, 0x00, 0x07, 0xF9, 0xFE, 0x7F, 0xFE, - 0x00, 0x00, 0xFF, 0xC7, 0xF3, 0xFF, 0xFC, 0x00, 0x1F, 0xFC, 0x3F, 0xDF, - 0xFF, 0xFC, 0x07, 0xFF, 0xC0, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x07, - 0xF7, 0xF7, 0xFF, 0xFF, 0xFF, 0xC0, 0x3F, 0xBF, 0x1F, 0xFF, 0xFF, 0xF8, - 0x00, 0xFD, 0xF8, 0x3F, 0xFF, 0xFF, 0x80, 0x07, 0xFF, 0xC0, 0x7F, 0xFF, - 0xF0, 0x00, 0x3F, 0xFE, 0x00, 0x7F, 0xFC, 0x00, 0x01, 0xFF, 0xF0, 0x00, - 0x08, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0xEF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xDF, 0xE0, 0x00, - 0x00, 0x00, 0x01, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE7, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0xFE, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x0F, 0xF1, - 0xFF, 0x80, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x0F, - 0xF8, 0x7F, 0xF8, 0x00, 0x00, 0x00, 0xFF, 0x83, 0xFF, 0xF0, 0x00, 0x00, - 0x0F, 0xF8, 0x1F, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xC0, 0xFD, 0xFF, 0x80, - 0x00, 0x1F, 0xFC, 0x07, 0xE7, 0xFF, 0x00, 0x07, 0xFF, 0xC0, 0x3F, 0x1F, - 0xFF, 0x81, 0xFF, 0xFC, 0x01, 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0x80, 0x0F, - 0xC0, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x7E, 0x03, 0xFF, 0xFF, 0xFF, 0x00, - 0x03, 0xF0, 0x07, 0xFF, 0xFF, 0xE0, 0x00, 0x1F, 0x80, 0x07, 0xFF, 0xFC, - 0x00, 0x00, 0x78, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x18, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, - 0x7F, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x03, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xFC, 0x1F, 0xF8, - 0x1F, 0xF8, 0x00, 0x07, 0xFF, 0xE0, 0x0F, 0xF0, 0x03, 0xFE, 0x00, 0x07, - 0xFF, 0x80, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x07, 0xFF, 0x00, 0x07, 0xF0, - 0x00, 0x3F, 0xC0, 0x07, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x07, - 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF0, 0x07, 0xFC, 0x00, 0x01, 0xF8, - 0x00, 0x01, 0xFC, 0x07, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFE, 0x03, - 0xFC, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7F, 0x03, 0xFC, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x3F, 0x83, 0xFC, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0xC1, - 0xFC, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x0F, 0xE1, 0xFE, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x07, 0xE0, 0xFE, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x07, 0xF0, - 0xFE, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xF8, 0x7F, 0x00, 0x00, 0x00, - 0x7F, 0x00, 0x03, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x03, 0xFC, - 0x3F, 0x80, 0x00, 0x00, 0x0F, 0xF8, 0x03, 0xFC, 0x1F, 0x80, 0x00, 0x00, - 0x03, 0xFF, 0x9F, 0xFE, 0x1F, 0xC0, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFE, - 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFE, 0x07, 0xE0, 0x00, 0x00, - 0x00, 0x0F, 0xFF, 0xFE, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFC, - 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x01, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xC0, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x03, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0x81, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xC0, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x1F, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xF0, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x7F, 0xC0, - 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x7F, - 0xF0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x01, 0xFF, - 0xF0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x0F, 0xFF, - 0xE0, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x01, - 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, - 0x80, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xC0, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, - 0xFC, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x7F, - 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, - 0x7F, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, - 0x00, 0x1F, 0xF8, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0xFC, 0x00, 0x00, 0x3F, - 0xFE, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x3F, 0x00, 0x00, - 0x00, 0xFF, 0xE0, 0x01, 0xF8, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x0F, 0xC0, - 0x00, 0x00, 0x03, 0xFE, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x03, - 0xF0, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x1F, 0x80, 0x00, 0x00, 0x00, 0xFF, - 0x80, 0xFC, 0x00, 0x00, 0x00, 0x03, 0xFE, 0x07, 0xE0, 0x00, 0x00, 0x00, - 0x0F, 0xF0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC1, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0xFE, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x7E, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0xC3, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x1F, - 0x80, 0x00, 0x00, 0x00, 0x03, 0xF8, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xC7, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x3F, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xF9, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xCF, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFB, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0xDF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xF7, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x7E, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF7, 0xE0, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFD, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0x7F, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF3, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x3F, 0x9F, 0x80, 0x00, 0x00, 0x00, 0x01, 0xFC, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xE7, 0xE0, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x3F, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xF1, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x0F, - 0xC0, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0x83, 0xF0, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x1F, 0x80, 0x00, 0x00, 0x00, - 0x1F, 0xC0, 0xFC, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x07, 0xE0, 0x00, 0x00, - 0x00, 0x1F, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x01, 0xF8, 0x00, - 0x00, 0x00, 0x1F, 0xF0, 0x0F, 0xC0, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x7E, - 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x03, 0xF0, 0x00, 0x00, 0x03, 0xFF, 0x00, - 0x1F, 0x80, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xFF, - 0x00, 0x07, 0xF8, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x3F, 0xFE, 0x03, 0xFF, - 0xFE, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xFF, - 0xFF, 0xFC, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x7F, - 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7E, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x03, 0xF1, 0xFF, 0xF0, - 0x00, 0x00, 0x00, 0x1F, 0xBF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0xFF, 0xFF, - 0xFF, 0xC0, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x3F, - 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, - 0x0F, 0xFE, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xE0, 0x03, 0xFE, 0x00, - 0x00, 0x03, 0xFE, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x3F, - 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, - 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0x80, 0x00, 0x01, 0xF8, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x7E, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0x1F, 0xC0, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0xC0, 0x00, - 0x7F, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x0F, 0xFC, - 0x00, 0x7F, 0x80, 0x00, 0x00, 0x7F, 0xF8, 0x0F, 0xFC, 0x00, 0x00, 0x03, - 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFC, 0x00, 0x00, - 0x00, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFC, 0x00, - 0x00, 0x00, 0x3F, 0x3F, 0xFF, 0x80, 0x00, 0x00, 0x01, 0xF8, 0x7F, 0xF0, - 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x10, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x7F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFB, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x0F, 0xF8, 0x00, 0x00, 0x00, - 0x03, 0xF3, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0xBF, 0xFF, 0xE0, 0x00, - 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x01, 0xFF, 0xF0, - 0x7F, 0xE0, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x7F, - 0xC0, 0x01, 0xFE, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x00, - 0x1F, 0xE0, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x1F, - 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xC0, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x03, 0xF0, - 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x1F, 0xC0, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xF0, 0x00, - 0x00, 0x3F, 0xC0, 0x00, 0x7F, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x07, 0xF8, - 0x00, 0x00, 0x0F, 0xFC, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xFC, 0x1F, - 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x1F, 0xFF, - 0xFF, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x07, - 0xEF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0xFF, 0x80, 0x00, 0x00, - 0x01, 0xF8, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, - 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFC, 0x00, 0x00, - 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x01, 0xFF, 0xFF, - 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, - 0x00, 0x03, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0x07, 0xFF, 0xE0, - 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xF8, - 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x07, 0xFE, 0x00, - 0x00, 0x00, 0x01, 0xFE, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x7F, - 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x07, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0x00, - 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0xFF, 0xFC, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0xFF, 0xFF, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x1F, 0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xFF, 0xFF, - 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xF8, 0x0F, 0xF8, 0x00, 0x03, 0xF0, - 0x00, 0x0F, 0xF0, 0x01, 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x0F, 0xF0, 0x00, - 0x7F, 0x80, 0x01, 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x1F, 0xC0, 0x00, 0xFC, - 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0x7E, 0x00, 0x03, 0xF8, 0x00, - 0x03, 0xF8, 0x00, 0x3F, 0x00, 0x01, 0xFC, 0x00, 0x01, 0xFC, 0x00, 0x1F, - 0x80, 0x00, 0xFC, 0x00, 0x00, 0x7F, 0xFF, 0xEF, 0xC0, 0x00, 0x7E, 0x00, - 0x00, 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, 0x00, 0x00, 0x1F, 0xFF, 0xFF, - 0xF0, 0x00, 0x1F, 0x80, 0x00, 0x0F, 0xFF, 0xFF, 0xF8, 0x00, 0x0F, 0xC0, - 0x00, 0x0F, 0xFF, 0xFF, 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xFF, 0xFF, - 0xFE, 0x00, 0x01, 0xF8, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0xFE, - 0x00, 0x03, 0xF8, 0x0F, 0xFF, 0xC0, 0x00, 0x7F, 0x00, 0x03, 0xFC, 0x07, - 0xF7, 0xE0, 0x00, 0x1F, 0xC0, 0x03, 0xFC, 0x03, 0xFB, 0xF0, 0x00, 0x0F, - 0xF8, 0x03, 0xFE, 0x01, 0xFD, 0xFC, 0x00, 0x03, 0xFF, 0x8F, 0xFE, 0x00, - 0xFE, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0x3F, 0x00, 0x00, - 0x3F, 0xFF, 0xFE, 0x00, 0x3F, 0x9F, 0xC0, 0x00, 0x0F, 0xFF, 0xFE, 0x00, - 0x1F, 0xCF, 0xE0, 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x0F, 0xE3, 0xF8, 0x00, - 0x00, 0x7F, 0xFC, 0x00, 0x07, 0xF1, 0xFC, 0x00, 0x00, 0x07, 0xF0, 0x00, - 0x03, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x3F, 0xC0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x81, 0xFE, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x7F, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0xE0, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x07, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF0, 0x01, 0xFF, 0x00, 0x00, 0x00, - 0x00, 0x3F, 0xF0, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, - 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x07, 0xFF, 0x00, 0x00, - 0x00, 0xFF, 0xE0, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x01, 0xFF, 0xE0, 0x00, - 0x00, 0x7F, 0xFF, 0x80, 0x0F, 0xFF, 0xE0, 0x00, 0x00, 0x0F, 0xFF, 0xFF, - 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, - 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x07, 0xFF, - 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xE7, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xBF, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFE, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x01, 0xFE, 0x00, 0x01, 0xFF, 0xF0, - 0x00, 0x7F, 0xFE, 0x00, 0x0F, 0xFF, 0x80, 0x07, 0xFF, 0xFC, 0x00, 0x7F, - 0xFC, 0x00, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xC0, - 0x1F, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xF8, 0x0F, 0xFF, 0x3F, - 0xFC, 0x07, 0xFF, 0xC0, 0x7F, 0x80, 0x3F, 0xF0, 0x3F, 0xFE, 0x07, 0xF8, - 0x00, 0x7F, 0x81, 0xFF, 0xF0, 0x3F, 0x80, 0x01, 0xFE, 0x0F, 0xFF, 0x83, - 0xF8, 0x00, 0x07, 0xF0, 0x7F, 0xFC, 0x1F, 0xC0, 0x00, 0x3F, 0x83, 0xFF, - 0xFF, 0xFC, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x07, 0xFF, - 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x01, - 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, - 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xFF, 0xFC, 0x1F, - 0x80, 0x00, 0x3F, 0x83, 0xFF, 0xE0, 0xFE, 0x00, 0x01, 0xFC, 0x1F, 0xFF, - 0x03, 0xF8, 0x00, 0x1F, 0xE0, 0xFF, 0xF8, 0x1F, 0xE0, 0x01, 0xFE, 0x07, - 0xFF, 0xC0, 0x7F, 0x80, 0x1F, 0xF0, 0x3F, 0xFE, 0x03, 0xFF, 0x03, 0xFF, - 0x01, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0x80, 0x3F, 0xFF, - 0xFF, 0x80, 0x7F, 0xFC, 0x00, 0xFF, 0xFF, 0xF8, 0x03, 0xFF, 0xE0, 0x03, - 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0xFF, 0xF8, - 0x00, 0x0F, 0xFC, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0xFE, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, - 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xE0, 0x3B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x78, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x07, 0xFE, - 0x07, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x07, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0xFF, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x00, - 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x00, - 0x00, 0x7E, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7F, - 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x0F, - 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0xC0, - 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x01, 0xFC, - 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x1F, 0xE0, 0x00, - 0x00, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, - 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF9, 0xFF, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xE0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xF0, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x7C, 0x00, - 0x00, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x07, 0xF8, - 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x1F, 0xC0, 0x00, - 0x00, 0x01, 0xFF, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x0F, 0xF8, 0x00, - 0x00, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x01, 0xFF, 0x00, 0x00, - 0x03, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, - 0x07, 0xFF, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x0F, 0xFF, 0xC1, 0xFF, - 0xFC, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, - 0x3F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x0F, 0xFF, 0x00, 0x3F, 0x00, 0x00, 0x01, 0xFF, 0xFE, 0x01, 0xF8, 0x00, - 0x00, 0x3F, 0xFF, 0xFC, 0x0F, 0xC0, 0x00, 0x03, 0xFF, 0xFF, 0xF0, 0x7E, - 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xC3, 0xF0, 0x00, 0x03, 0xFF, 0xFF, 0xFE, - 0x1F, 0x80, 0x00, 0x1F, 0xF0, 0x0F, 0xF8, 0xFC, 0x00, 0x01, 0xFF, 0x00, - 0x3F, 0xE7, 0xE0, 0x00, 0x0F, 0xE0, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0xFF, - 0x00, 0x03, 0xFD, 0xF8, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xEF, 0xC0, 0x00, - 0x7F, 0x00, 0x00, 0x3F, 0x7E, 0x00, 0x07, 0xF8, 0x00, 0x01, 0xFB, 0xF0, - 0x00, 0x7F, 0xC0, 0x00, 0x0F, 0xFF, 0x80, 0x07, 0xFE, 0x00, 0x00, 0x7F, - 0xFC, 0x00, 0x7F, 0xF0, 0x00, 0x03, 0xFF, 0xE0, 0x0F, 0xFF, 0x80, 0x00, - 0x1F, 0xFF, 0x00, 0xFF, 0xFC, 0x00, 0x00, 0xFF, 0xF8, 0x0F, 0xFF, 0xE0, - 0x00, 0x07, 0xEF, 0xC0, 0xFF, 0xFF, 0x80, 0x00, 0x7F, 0x7E, 0x0F, 0xFD, - 0xFC, 0x00, 0x03, 0xFB, 0xF1, 0xFF, 0xC7, 0xF0, 0x00, 0x3F, 0x9F, 0x9F, - 0xFF, 0x3F, 0xC0, 0x03, 0xFC, 0xFD, 0xFF, 0xFC, 0xFF, 0x80, 0x7F, 0xC7, - 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, - 0xE1, 0xFF, 0xF9, 0xFE, 0x7F, 0xFF, 0xFE, 0x0F, 0xFF, 0x07, 0xF9, 0xFF, - 0xFF, 0xE0, 0x7F, 0xF0, 0x3F, 0xC3, 0xFF, 0xFC, 0x03, 0xFF, 0x00, 0xFF, - 0x07, 0xFF, 0x80, 0x1F, 0xF0, 0x03, 0xFC, 0x07, 0xE0, 0x00, 0xFF, 0x00, - 0x0F, 0xE0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x3F, - 0x00, 0x01, 0xFE, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x07, 0xF8, 0x00, 0x00, - 0x0F, 0xC0, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFF, 0x00, - 0x00, 0x03, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x1F, - 0xE0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x07, 0xE0, 0x00, - 0x01, 0xFE, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x01, 0xF8, - 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFF, 0x00, 0x00, - 0x7E, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0xE0, - 0x00, 0x1F, 0x80, 0x00, 0x00, 0x7F, 0x80, 0x00, 0xFC, 0x00, 0x00, 0x01, - 0xFE, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x3F, 0x00, 0x00, - 0x00, 0x3F, 0xC0, 0x01, 0xF8, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x0F, 0xC0, - 0x00, 0x00, 0x03, 0xFC, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x03, - 0xF0, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x1F, 0x80, 0x00, 0x00, 0x01, 0xFE, - 0x00, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x07, 0xE0, 0x00, 0x00, 0x00, - 0x3F, 0xC0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01, 0xF8, 0x00, 0x00, - 0x00, 0x07, 0xF8, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x7E, 0x00, - 0x00, 0x00, 0x00, 0x7F, 0x83, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x1F, - 0x80, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0xC7, 0xE0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xF9, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xEF, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x78, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x78, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x7E, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0F, 0xBF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0xDF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFE, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFE, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0xFF, 0xFF, 0xBF, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x1F, 0xF7, 0xFF, - 0xCF, 0xFC, 0x00, 0x3F, 0xFE, 0x00, 0x1F, 0xF3, 0xFF, 0xE3, 0xFF, 0x00, - 0x7F, 0xFF, 0xC0, 0x1F, 0xF1, 0xFF, 0xF0, 0xFF, 0xC0, 0x7F, 0xFF, 0xF0, - 0x1F, 0xF0, 0xFF, 0xF8, 0x3F, 0xF0, 0x7F, 0xFF, 0xFC, 0x1F, 0xF0, 0x7F, - 0xFC, 0x0F, 0xFC, 0x7F, 0xFF, 0xFF, 0x1F, 0xF0, 0x3F, 0xFE, 0x03, 0xFF, - 0x7F, 0xC0, 0x7F, 0xDF, 0xF0, 0x1F, 0xFF, 0x00, 0xFF, 0xFF, 0x80, 0x0F, - 0xFF, 0xF0, 0x0F, 0xFF, 0x80, 0x3F, 0xFF, 0x80, 0x03, 0xFF, 0xF0, 0x07, - 0xFF, 0xC0, 0x07, 0xFF, 0x80, 0x00, 0xFF, 0xF0, 0x03, 0xFF, 0xE0, 0x01, - 0xFF, 0xC0, 0x00, 0x3F, 0xF0, 0x01, 0xFF, 0xF0, 0x00, 0x7F, 0xC0, 0x00, - 0x1F, 0xF0, 0x00, 0xFF, 0xF8, 0x00, 0x1F, 0xE0, 0x00, 0x07, 0xF0, 0x00, - 0x7F, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0xFE, 0x00, - 0x03, 0xF0, 0x00, 0x01, 0xF8, 0x00, 0x1F, 0xFF, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0xFC, 0x00, 0x0F, 0xFF, 0x80, 0x01, 0xFC, 0x00, 0x00, 0x7E, 0x00, - 0x07, 0xFF, 0xC0, 0x00, 0x7E, 0x00, 0x00, 0x3F, 0x00, 0x03, 0xFF, 0xE0, - 0x00, 0x3F, 0x80, 0x00, 0x3F, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x1F, 0xC0, - 0x00, 0x1F, 0x80, 0x00, 0xFF, 0xF8, 0x00, 0x0F, 0xF0, 0x00, 0x1F, 0xC0, - 0x00, 0x7F, 0xFC, 0x00, 0x03, 0xFC, 0x00, 0x1F, 0xE0, 0x00, 0x3F, 0xFE, - 0x00, 0x01, 0xFF, 0x00, 0x1F, 0xE0, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x7F, - 0xC0, 0x3F, 0xF0, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, - 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x00, 0x03, 0xFF, - 0xE0, 0x00, 0x03, 0xFF, 0xFF, 0xF0, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, - 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0xF0, - 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0x00, 0x3F, - 0xFE, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, - 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xF7, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xF9, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xE7, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xBF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x00, 0x00, - 0x01, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, - 0xF0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x3F, - 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF7, 0xF8, 0x00, 0x00, 0x00, - 0x0F, 0xFF, 0x9F, 0xE0, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0xFF, 0x00, 0x00, - 0x00, 0x03, 0xFF, 0xE3, 0xFC, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x0F, 0xF0, - 0x00, 0x00, 0x00, 0xFF, 0xF8, 0x7F, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xC1, - 0xFE, 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x07, 0xF8, 0x00, 0x00, 0x01, 0xFF, - 0xF0, 0x3F, 0xC0, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0xFF, 0x00, 0x00, 0x00, - 0x7F, 0xFC, 0x03, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x0F, 0xF0, 0x00, - 0x00, 0x1F, 0xFF, 0x00, 0x7F, 0x80, 0x00, 0x00, 0xFF, 0xF8, 0x01, 0xFE, - 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x07, 0xF8, 0x00, 0x00, 0x3F, 0xFE, 0x00, - 0x3F, 0xC0, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0xFF, 0x00, 0x00, 0x0F, 0xFF, - 0x80, 0x03, 0xFC, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x1F, 0xE0, 0x00, 0x03, - 0xFF, 0xE0, 0x00, 0x7F, 0x80, 0x00, 0x1F, 0xFF, 0x00, 0x01, 0xFE, 0x00, - 0x00, 0xFF, 0xF8, 0x00, 0x07, 0xF8, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x3F, - 0xC0, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0xFF, 0x00, 0x01, 0xFF, 0xF0, 0x00, - 0x03, 0xFC, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0xFC, - 0x00, 0x00, 0x7F, 0x80, 0x03, 0xFF, 0xE0, 0x00, 0x01, 0xFE, 0x00, 0x1F, - 0xFF, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x3F, 0xC0, - 0x07, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x03, - 0xFC, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0xE0, 0x0F, 0xFF, 0x80, 0x00, - 0x00, 0x7F, 0x80, 0x7F, 0xFC, 0x00, 0x00, 0x01, 0xFE, 0x03, 0xFF, 0xE0, - 0x00, 0x00, 0x0F, 0xF0, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0xFF, - 0xF8, 0x00, 0x00, 0x00, 0xFF, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x07, 0xF8, - 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xE1, 0xFF, 0xF0, 0x00, 0x00, 0x00, - 0x7F, 0x8F, 0xFF, 0x80, 0x00, 0x00, 0x01, 0xFE, 0x7F, 0xFC, 0x00, 0x00, - 0x00, 0x0F, 0xF3, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0xDF, 0xFF, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, - 0xC0, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x7F, - 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, - 0x0F, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFE, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x78, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, - 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x03, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFC, 0x00, 0xFF, - 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0xE0, 0x00, - 0x00, 0x07, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x07, 0xFF, - 0x00, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, - 0x01, 0xFF, 0x80, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, - 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x03, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xFF, 0x80, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0xC0, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x01, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x01, 0xFE, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xFE, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7F, 0x80, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x7F, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x7F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xF8, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xFC, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x1F, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x8F, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC7, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0xF3, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF9, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xDF, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0xBF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xCF, 0xC0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE7, 0xE0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xF3, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xF1, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x7E, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x3F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFE, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xFE, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x03, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3F, 0xC0, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, - 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x03, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, - 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x07, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00, - 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xF0, - 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x07, - 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, - 0x03, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xC0, 0x3F, 0xFF, 0xE0, - 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, - 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, - 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, - 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, - 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x1F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFC, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, - 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, - 0x3F, 0xFF, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xE0, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x7E, 0x00, 0x00, - 0x00, 0x01, 0xFF, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x3F, 0xE0, - 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x07, 0xE0, - 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0xC0, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x1F, - 0x80, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, - 0x00, 0x3F, 0x80, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x03, - 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x03, 0xFF, 0xFE, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x1F, 0xC1, - 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x07, 0xF0, 0xFF, 0xFF, 0xFF, 0x00, - 0x00, 0x00, 0x01, 0xFC, 0x7F, 0xF0, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x7F, - 0x1F, 0xF0, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x1F, 0xCF, 0xF0, 0x00, 0xFF, - 0x00, 0x00, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x01, - 0xFD, 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, - 0x7E, 0x00, 0x00, 0x00, 0x1F, 0x9F, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x00, - 0x0F, 0xE7, 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x03, 0xFB, 0xF8, 0x00, - 0x00, 0xFC, 0x00, 0x00, 0x01, 0xFE, 0xFE, 0x00, 0x00, 0x3F, 0x00, 0x00, - 0x00, 0x7F, 0x3F, 0x80, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x3F, 0xC7, 0xE0, - 0x00, 0x07, 0xF0, 0x00, 0x00, 0x0F, 0xE1, 0xF8, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x07, 0xF8, 0x7F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x03, 0xFC, 0x1F, - 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x01, 0xFF, 0x03, 0xF8, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0xFF, 0x80, 0xFF, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x7F, 0xC0, - 0x1F, 0xE0, 0x07, 0xFC, 0x00, 0x00, 0x7F, 0xE0, 0x07, 0xFE, 0x07, 0xFF, - 0xC0, 0x00, 0x7F, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xF8, - 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x7F, 0xFF, 0xEF, 0xFF, 0xFF, 0xFE, - 0x00, 0x00, 0x07, 0xFF, 0xF0, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x7F, - 0xE0, 0x0F, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0xFC, - 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x0F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xC0, 0x00, - 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x0F, 0xFF, 0x00, - 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x1F, - 0xFC, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, - 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x01, 0xFF, - 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x0F, - 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x0F, 0xF0, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xF8, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x07, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x03, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xF0, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xF8, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0xFE, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, - 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x1F, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0x87, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC3, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE1, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xF8, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFC, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x3F, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x1F, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0x8F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0xC7, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE3, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF1, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xF0, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x1F, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x0F, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xFF, 0xFF, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0x80, - 0xFE, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x7F, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xF0, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x03, - 0xFF, 0x9F, 0xFC, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x01, 0xFF, - 0x03, 0xF8, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x7F, 0x81, 0xFE, 0x00, - 0x00, 0x00, 0x01, 0xFC, 0x00, 0x1F, 0xE0, 0x7F, 0x80, 0x00, 0x00, 0x01, - 0xFC, 0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x01, - 0xF8, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x03, 0xFC, - 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x7F, 0x00, 0xFF, 0x80, 0x00, 0x00, - 0x1F, 0x80, 0x00, 0x3F, 0x80, 0x3F, 0xE0, 0x00, 0x00, 0x0F, 0xC0, 0x00, - 0x1F, 0xC0, 0x0F, 0xF8, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xE0, 0x03, - 0xFF, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xE0, 0x00, 0xFF, 0xE0, 0x00, - 0x01, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0xFE, 0x00, - 0x03, 0xF8, 0x00, 0x0F, 0xFF, 0xE0, 0x01, 0xFF, 0x80, 0x01, 0xFC, 0x00, - 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x01, 0xFC, 0x00, 0x00, 0x7F, 0xFF, - 0xFF, 0xFF, 0xF8, 0x01, 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, - 0x03, 0xFE, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, - 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xBF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFC, 0x0F, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x70, 0x00, 0x00, 0x40, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x07, 0xC0, - 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x1F, 0x80, 0x00, 0x3F, 0xFF, 0xFE, 0x00, - 0xFE, 0x00, 0x01, 0xFF, 0xFF, 0xFC, 0x03, 0xFC, 0x00, 0x1F, 0xFF, 0xFF, - 0xFC, 0x0F, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xF8, 0x3F, 0xE0, 0x07, 0xFF, - 0x80, 0xFF, 0xF0, 0xFF, 0xC0, 0x1F, 0xF0, 0x00, 0x7F, 0xC3, 0xFF, 0x80, - 0xFF, 0x80, 0x00, 0xFF, 0x8F, 0xFE, 0x07, 0xF8, 0x00, 0x01, 0xFF, 0x3F, - 0xFC, 0x1F, 0xC0, 0x00, 0x03, 0xFC, 0xFF, 0xF8, 0xFE, 0x00, 0x00, 0x07, - 0xFB, 0xFF, 0xF3, 0xF8, 0x00, 0x00, 0x0F, 0xEF, 0xFF, 0xCF, 0xC0, 0x00, - 0x00, 0x3F, 0xBF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0xFF, 0xF8, - 0x00, 0x00, 0x01, 0xFF, 0xF9, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xFF, 0xE3, - 0xFF, 0x80, 0x00, 0x00, 0x0F, 0xFF, 0x8F, 0xFE, 0x00, 0x00, 0x00, 0x3F, - 0xFE, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0xFF, 0xF8, 0x3F, 0xE0, 0x00, 0x00, - 0x03, 0xFF, 0xE0, 0xFF, 0x80, 0x00, 0x00, 0x0F, 0xFF, 0x81, 0xFE, 0x00, - 0x00, 0x00, 0x7F, 0xFE, 0x03, 0xFC, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x0F, - 0xF0, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x1F, 0xE0, 0x00, 0x00, 0x3F, 0xBF, - 0x80, 0x3F, 0x80, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x7F, 0x00, 0x00, 0x07, - 0xF3, 0xF8, 0x01, 0xFE, 0x00, 0x00, 0x3F, 0xCF, 0xE0, 0x03, 0xFC, 0x00, - 0x01, 0xFE, 0x3F, 0x80, 0x07, 0xF8, 0x00, 0x0F, 0xF8, 0xFE, 0x00, 0x1F, - 0xF8, 0x00, 0xFF, 0xC3, 0xF8, 0x00, 0x3F, 0xFE, 0x3F, 0xFE, 0x0F, 0xE0, - 0x00, 0x7F, 0xFF, 0xFF, 0xF0, 0x3F, 0x80, 0x01, 0xFF, 0xFF, 0xFF, 0x80, - 0xFE, 0x00, 0x03, 0xFF, 0xFF, 0xFC, 0x03, 0xF8, 0x00, 0x07, 0xFF, 0xFF, - 0xC0, 0x0F, 0xE0, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0x3F, 0x80, 0x00, 0x3F, - 0xFF, 0x80, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x3F, - 0x80, 0x00, 0x07, 0xF8, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xF0, 0x00, - 0x03, 0xF8, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, - 0x80, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0x01, 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x1F, 0xC0, 0x00, - 0xFE, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x03, 0xF8, 0x00, 0x00, 0x00, 0xFF, - 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x3F, 0x80, 0x00, 0x00, - 0x03, 0xF8, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x03, 0xF8, 0x00, - 0x00, 0x00, 0x1F, 0xE0, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x3F, - 0x80, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x01, 0xFE, - 0x03, 0xF8, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x0F, 0xE0, 0x00, 0x00, 0x00, - 0x0F, 0xF0, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0xFE, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0x83, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x0F, 0xE0, - 0x00, 0x00, 0x00, 0x01, 0xFE, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x03, 0xFC, - 0xFE, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0xCF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x1F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7C, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, - 0x07, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00, - 0x00, 0x00, 0x07, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xC0, - 0x00, 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x0F, - 0xE0, 0x00, 0x3F, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0xFC, 0x00, 0x00, - 0x1F, 0xFF, 0xE0, 0x03, 0xF0, 0x00, 0x00, 0xFF, 0xFF, 0xE0, 0x0F, 0xE0, - 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x1F, 0x80, 0x00, 0x3F, 0xFF, 0xFF, 0x80, - 0x7F, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0x00, 0xFE, 0x00, 0x07, 0xF8, 0x07, - 0xFC, 0x03, 0xF8, 0x00, 0x3F, 0xC0, 0x07, 0xF8, 0x07, 0xF0, 0x00, 0xFE, - 0x00, 0x0F, 0xE0, 0x1F, 0xE0, 0x07, 0xF0, 0x00, 0x1F, 0x80, 0x3F, 0xC0, - 0x1F, 0xC0, 0x00, 0x7F, 0x00, 0x7F, 0xC0, 0x7E, 0x00, 0x00, 0xFC, 0x01, - 0xFF, 0x83, 0xF8, 0x00, 0x03, 0xF0, 0x03, 0xFF, 0xCF, 0xE0, 0x00, 0x0F, - 0xC0, 0x07, 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0x00, 0x07, 0xFF, 0xFE, 0x00, - 0x00, 0xFC, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xFF, - 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x7F, 0x00, 0x00, - 0x0F, 0xFF, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0x03, 0xFC, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x07, - 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x1F, - 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xF8, 0x1F, 0x00, 0x00, - 0x00, 0x7F, 0xFF, 0x80, 0x7C, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x03, 0xF8, - 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x3F, 0x80, - 0x1F, 0xE0, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x0F, - 0xF0, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0x80, 0x01, 0xFF, 0x00, 0x00, - 0x03, 0xFC, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x07, 0xFF, - 0x00, 0x03, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0x80, 0x7F, 0xFC, 0x00, 0x00, - 0x1F, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFE, 0x00, - 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xFF, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x01, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, - 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF9, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, 0xC0, 0x07, 0xFF, 0xFF, - 0xFF, 0x0F, 0xF0, 0x00, 0x7F, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x07, 0xF0, - 0x00, 0x00, 0x3F, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x0F, - 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x07, 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0xFE, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, - 0x00, 0x03, 0xF0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x07, - 0xF0, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0x1F, 0xE0, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x7F, 0xC0, 0x00, - 0x00, 0x1F, 0xF8, 0x3F, 0xF0, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFC, 0x00, - 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, - 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFE, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0xFE, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xBF, 0x80, 0x00, - 0x00, 0x00, 0x00, 0xFD, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE7, 0xE0, - 0x00, 0x00, 0x00, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x03, 0xF9, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x87, 0xE0, 0x00, 0x00, 0x00, 0x01, - 0xFC, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x0F, 0xE1, 0xFE, 0x00, 0x00, 0x00, - 0x00, 0xFE, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x3F, 0xC0, 0x00, - 0x00, 0x00, 0x7F, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x03, 0xFC, - 0x00, 0x00, 0x00, 0x7F, 0x80, 0x1F, 0xF0, 0x00, 0x00, 0x0F, 0xF8, 0x00, - 0x7F, 0xC0, 0x00, 0x00, 0xFF, 0xC0, 0x01, 0xFF, 0x80, 0x00, 0x1F, 0xFC, - 0x00, 0x07, 0xFF, 0x80, 0x03, 0xFF, 0xC0, 0x00, 0x1F, 0xFF, 0xE3, 0xFF, - 0xFC, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0xFF, 0xFF, - 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x07, - 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xFE, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x63, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xBF, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xFD, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF9, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x7F, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE1, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, - 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0x81, 0xFC, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x0F, 0xE0, 0x00, 0x00, - 0x00, 0x1F, 0xC0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0xFC, 0x00, - 0x00, 0x00, 0x07, 0xF0, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x3F, - 0x00, 0x00, 0x00, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x1F, 0x80, - 0x0F, 0xE0, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x0F, - 0xE0, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x0F, 0xE0, 0x00, 0x00, - 0x07, 0xF0, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, - 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x3F, - 0x00, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, - 0x0F, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x03, 0xF8, - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x0F, 0xE0, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, - 0x80, 0x00, 0x3F, 0x80, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0xFE, 0x00, - 0x00, 0x01, 0xFC, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x7F, - 0x00, 0x00, 0x00, 0x3F, 0x80, 0x03, 0xF8, 0x00, 0x00, 0x01, 0xFC, 0x00, - 0x3F, 0x80, 0x00, 0x00, 0x07, 0xE0, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x3F, - 0x80, 0x0F, 0xC0, 0x00, 0x00, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x00, 0x00, - 0x07, 0xE0, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x3F, 0x00, 0x00, - 0x00, 0x01, 0xFC, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x1F, 0xC0, - 0x00, 0x00, 0x00, 0x3F, 0x81, 0xFC, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x0F, - 0xE0, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0x87, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x3F, 0x80, 0x00, 0x00, 0x00, - 0x07, 0xE1, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x9F, 0xC0, 0x00, 0x00, - 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF7, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x7C, 0x00, 0x03, 0xC0, 0x00, - 0x00, 0xF0, 0x00, 0x0F, 0xBF, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xFC, 0x00, - 0x0F, 0xDF, 0x80, 0x01, 0xF8, 0x00, 0x00, 0x7E, 0x00, 0x07, 0xEF, 0xE0, - 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x7F, 0x00, - 0x00, 0x3F, 0x80, 0x03, 0xF9, 0xF8, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x80, - 0x01, 0xFC, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x01, 0xFC, 0x7F, - 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x00, 0xFE, 0x1F, 0x80, 0x01, 0xF8, - 0x00, 0x07, 0xE0, 0x00, 0x7F, 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x07, 0xF0, - 0x00, 0x7F, 0x07, 0xF0, 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00, 0x3F, 0x81, - 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x1F, 0xC0, 0xFE, 0x00, 0x0F, - 0xE0, 0x01, 0xFC, 0x00, 0x1F, 0xC0, 0x7F, 0x00, 0x07, 0xF0, 0x00, 0xFE, - 0x00, 0x0F, 0xE0, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x07, 0xF0, - 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x07, 0xF0, 0x07, 0xF0, 0x00, - 0x7F, 0x00, 0x3F, 0x80, 0x03, 0xF8, 0x01, 0xF8, 0x00, 0x1F, 0xC0, 0x1F, - 0x80, 0x03, 0xF8, 0x00, 0xFE, 0x00, 0x0F, 0xE0, 0x1F, 0xC0, 0x01, 0xFC, - 0x00, 0x7F, 0x00, 0x07, 0xF0, 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x1F, 0xC0, - 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0xFF, 0xFF, - 0xF0, 0x00, 0x7F, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x3F, - 0x80, 0x01, 0xFC, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x3F, 0x80, 0x00, 0xFE, - 0x00, 0x3F, 0xFF, 0xFF, 0x00, 0x1F, 0xC0, 0x00, 0x7F, 0x00, 0x3F, 0xFF, - 0xFF, 0xC0, 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x3F, 0xFC, 0xFF, 0xF0, 0x0F, - 0xE0, 0x00, 0x0F, 0xE0, 0x1F, 0xF0, 0x0F, 0xF8, 0x07, 0xF0, 0x00, 0x07, - 0xF0, 0x1F, 0xE0, 0x01, 0xFE, 0x03, 0xF8, 0x00, 0x01, 0xFC, 0x0F, 0xE0, - 0x00, 0x7F, 0x03, 0xF8, 0x00, 0x00, 0xFE, 0x0F, 0xF0, 0x00, 0x1F, 0xC1, - 0xFC, 0x00, 0x00, 0x3F, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0xFE, 0x00, 0x00, - 0x1F, 0xC3, 0xF8, 0x00, 0x03, 0xF0, 0xFE, 0x00, 0x00, 0x0F, 0xE1, 0xF8, - 0x00, 0x01, 0xFC, 0x7F, 0x00, 0x00, 0x03, 0xF0, 0xFC, 0x00, 0x00, 0xFE, - 0x3F, 0x80, 0x00, 0x01, 0xFC, 0x7E, 0x00, 0x00, 0x7F, 0x3F, 0x80, 0x00, - 0x00, 0xFE, 0x3F, 0x00, 0x00, 0x3F, 0x9F, 0xC0, 0x00, 0x00, 0x3F, 0x1F, - 0x80, 0x00, 0x1F, 0xCF, 0xE0, 0x00, 0x00, 0x1F, 0xCF, 0xC0, 0x00, 0x0F, - 0xCF, 0xE0, 0x00, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0x0F, 0xE7, 0xF0, 0x00, - 0x00, 0x03, 0xF3, 0xF8, 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x00, 0x01, 0xFC, - 0xFE, 0x00, 0x07, 0xFB, 0xF8, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0x80, 0x07, - 0xF9, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x1F, 0xE0, 0x07, 0xFD, 0xFC, 0x00, - 0x00, 0x00, 0x1F, 0xC7, 0xFE, 0x1F, 0xFC, 0xFE, 0x00, 0x00, 0x00, 0x0F, - 0xE3, 0xFF, 0xFF, 0xFC, 0x7F, 0x00, 0x00, 0x00, 0x03, 0xF8, 0xFF, 0xFF, - 0xFC, 0x7F, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x3F, 0xFF, 0xFC, 0x3F, 0x80, - 0x00, 0x00, 0x00, 0xFE, 0x07, 0xFF, 0xFC, 0x1F, 0xC0, 0x00, 0x00, 0x00, - 0x3F, 0x81, 0xFF, 0xF8, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0xFF, - 0xFC, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x7E, 0x7E, 0x07, 0xF0, - 0x00, 0x00, 0x00, 0x03, 0xF8, 0x7F, 0x3F, 0x87, 0xF0, 0x00, 0x00, 0x00, - 0x01, 0xFC, 0x3F, 0x9F, 0xC3, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x1F, - 0x87, 0xE1, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x9F, 0xC3, 0xF9, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0xCF, 0xE1, 0xFC, 0xFE, 0x00, 0x00, 0x00, - 0x00, 0x07, 0xE7, 0xE0, 0x7E, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, - 0xF0, 0x3F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x1F, 0xFF, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x07, 0xFF, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0xFC, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xFE, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x7F, - 0xF0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x3F, 0xF0, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xFF, 0x80, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7F, 0x80, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x03, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0xFE, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, - 0x0F, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xBF, 0x80, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0xBF, 0xC0, 0x00, 0x00, 0x00, 0x07, 0xF9, 0xFE, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0x87, 0xF8, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x1F, 0xE0, - 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x7F, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x03, - 0xFC, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x0F, 0xF0, 0x00, 0x00, 0x01, 0xFE, - 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x1F, 0xE0, 0x01, 0xFE, 0x00, 0x00, 0x00, - 0xFE, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x1F, 0xE0, 0x00, - 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x03, 0xFC, - 0x00, 0x00, 0x7F, 0x80, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x7F, 0x80, 0x00, 0x01, 0xFE, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x07, 0xF9, 0xFF, 0x3F, 0xC0, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFC, - 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x03, 0xFF, 0xFF, - 0xFE, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0xFF, - 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x1F, 0xFC, 0x00, 0x00, 0x00, - 0x7F, 0xC0, 0x1F, 0xF0, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x7F, 0x80, 0x00, - 0x00, 0x3F, 0x80, 0x01, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x07, 0xF0, - 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x3F, 0x00, 0x00, - 0x03, 0xF0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x1F, 0x80, - 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x0F, - 0xE0, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0x80, - 0x1F, 0xF0, 0x00, 0x00, 0x03, 0xFF, 0x83, 0xFF, 0x00, 0x00, 0x00, 0x0F, - 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0x80, 0x00, 0x00, - 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, - 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x1F, 0xEF, 0xFE, 0xFF, - 0x00, 0x00, 0x01, 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x0F, 0xF0, 0x00, - 0x1F, 0xE0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x0F, 0xF0, - 0x00, 0x01, 0xFE, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x07, - 0xF8, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x7F, 0x80, 0x00, 0x00, 0xFF, 0x00, - 0x07, 0xF8, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x1F, - 0xE0, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x3F, 0xC0, 0x00, 0x00, - 0x01, 0xFC, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x1F, 0xE0, 0x00, - 0x00, 0x00, 0x3F, 0xC1, 0xFE, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0xE0, - 0x00, 0x00, 0x00, 0x07, 0xF8, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xEF, - 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x3E, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xDF, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0xF7, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF9, 0xFF, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0xF8, 0x1F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x07, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0xF8, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x1F, - 0xF0, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, - 0x0F, 0xF8, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, - 0x7F, 0xC0, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, - 0x0F, 0xF8, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, - 0x01, 0xFF, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, - 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x0F, 0xF8, 0x00, 0x00, - 0x00, 0x07, 0xFC, 0xFF, 0x8F, 0xF8, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, - 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, - 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xFF, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFE, - 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x1F, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0xFE, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFE, - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x1F, - 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x03, - 0xF0, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x7F, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x00, - 0x07, 0xF8, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x00, 0xFF, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE1, 0xFF, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x3F, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x7F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x1F, 0xF8, 0x00, 0x00, - 0x00, 0x3F, 0x80, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x01, - 0xFF, 0xFF, 0x80, 0x00, 0x00, 0xFF, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, - 0x01, 0xFE, 0x00, 0x07, 0xFF, 0xFF, 0xF0, 0x00, 0x01, 0xFE, 0x00, 0x0F, - 0xFF, 0xFF, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x1F, 0xF8, 0x3F, 0xF8, 0x00, - 0x07, 0xF8, 0x00, 0x3F, 0xE0, 0x07, 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x3F, - 0xC0, 0x03, 0xFC, 0x00, 0x0F, 0xF0, 0x00, 0x7F, 0x80, 0x01, 0xFE, 0x00, - 0x1F, 0xE0, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x1F, 0xC0, 0x00, 0x7E, - 0x00, 0x00, 0xFE, 0x00, 0x3F, 0xC0, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x00, - 0x7F, 0x80, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x00, 0xFF, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x7F, 0x00, 0xFF, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7F, 0x01, - 0xFE, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7F, 0x03, 0xFC, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x7F, 0x03, 0xF8, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7E, 0x07, - 0xF8, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFE, 0x0F, 0xF0, 0x00, 0x00, 0x7F, - 0x00, 0x00, 0xFE, 0x0F, 0xE0, 0x00, 0x00, 0x7F, 0x80, 0x01, 0xFE, 0x1F, - 0xE0, 0x00, 0x00, 0x3F, 0x80, 0x03, 0xFC, 0x3F, 0xC0, 0x00, 0x00, 0x3F, - 0xE0, 0x07, 0xFC, 0x7F, 0x80, 0x00, 0x00, 0x1F, 0xF8, 0x3F, 0xF8, 0x7F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x3F, - 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, - 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, - 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, - 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, - 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, - 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, - 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, - 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF8, 0x00, 0x0F, 0x80, 0x00, 0x7C, 0x00, - 0x07, 0xC0, 0x00, 0x7C, 0x00, 0x03, 0xE0, 0x00, 0x3E, 0x00, 0x03, 0xE0, - 0x00, 0x3E, 0x00, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x01, 0xF0, 0x00, 0x0F, - 0x80, 0x00, 0xF8, 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x07, 0xC0, 0x00, - 0x7C, 0x00, 0x07, 0xC0, 0x00, 0x3E, 0x00, 0x03, 0xE0, 0x00, 0x3E, 0x00, - 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x00, 0xF8, - 0x00, 0x0F, 0x80, 0x00, 0xF8, 0x00, 0x07, 0xC0, 0x00, 0x7C, 0x00, 0x07, - 0xC0, 0x00, 0x7C, 0x00, 0x03, 0xE0, 0x00, 0x3E, 0x00, 0x03, 0xE0, 0x00, - 0x1F, 0x00, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x01, 0xF0, 0x00, 0x0F, 0x80, - 0x00, 0xF8, 0x00, 0x0F, 0x80, 0x00, 0x7C, 0x00, 0x07, 0xC0, 0x00, 0x7C, - 0x00, 0x07, 0xC0, 0x00, 0x3E, 0x00, 0x03, 0xE0, 0x00, 0x3E, 0x00, 0x01, - 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, - 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, - 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, - 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, - 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, - 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, - 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, - 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, - 0x0F, 0xC0, 0x3F, 0x00, 0xFC, 0x03, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x0F, 0x80, 0x00, 0x00, - 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x03, 0xFE, - 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x01, 0xF7, 0xC0, 0x00, 0x0F, 0xBF, 0x00, - 0x00, 0xFC, 0xF8, 0x00, 0x07, 0xC7, 0xC0, 0x00, 0x7E, 0x3F, 0x00, 0x03, - 0xE0, 0xF8, 0x00, 0x3F, 0x07, 0xE0, 0x01, 0xF8, 0x1F, 0x00, 0x0F, 0x80, - 0xFC, 0x00, 0xFC, 0x07, 0xE0, 0x07, 0xC0, 0x1F, 0x80, 0x7E, 0x00, 0xFC, - 0x03, 0xF0, 0x03, 0xF0, 0x3F, 0x00, 0x1F, 0x81, 0xF8, 0x00, 0x7C, 0x1F, - 0x80, 0x03, 0xF0, 0xFC, 0x00, 0x1F, 0x8F, 0xE0, 0x00, 0x7E, 0x7E, 0x00, - 0x03, 0xF3, 0xF0, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x7E, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0x83, 0xFC, 0x0F, 0xF0, 0x3F, 0x80, 0xFE, - 0x07, 0xF0, 0x1F, 0x80, 0x7E, 0x01, 0xF0, 0x07, 0xC0, 0x00, 0x00, 0x00, - 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC0, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xF3, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x8F, 0xC0, - 0x00, 0x00, 0x00, 0x01, 0xFC, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC3, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x07, - 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x03, 0xF8, 0x00, 0x00, 0x00, - 0x03, 0xF8, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x7F, 0x00, 0x00, - 0x00, 0x01, 0xFC, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x0F, 0xC0, - 0x00, 0x00, 0x00, 0x7F, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x03, - 0xF8, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x0F, 0xC0, 0x00, 0x00, 0x01, 0xFC, - 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x03, 0xF8, 0x00, 0x00, 0x00, - 0xFE, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x7F, 0x00, 0x00, - 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x01, - 0xF8, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x3F, - 0x80, 0x00, 0x0F, 0xE0, 0x00, 0x03, 0xF9, 0xF8, 0x00, 0x7F, 0x00, 0x00, - 0x1F, 0xFF, 0xFC, 0x01, 0xF8, 0x00, 0x00, 0xFF, 0xFF, 0xF8, 0x0F, 0xE0, - 0x00, 0x0F, 0xFF, 0xFF, 0xE0, 0x7F, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0x81, - 0xF8, 0x00, 0x03, 0xFF, 0xFF, 0xFE, 0x0F, 0xE0, 0x00, 0x3F, 0xFF, 0xFF, - 0xF8, 0x7F, 0x00, 0x01, 0xFF, 0xC0, 0x7F, 0xE1, 0xF8, 0x00, 0x0F, 0xF8, - 0x01, 0xFF, 0x0F, 0xE0, 0x00, 0xFF, 0x80, 0x03, 0xFC, 0x7F, 0x00, 0x07, - 0xF8, 0x00, 0x0F, 0xE1, 0xF8, 0x00, 0x3F, 0x80, 0x00, 0x7F, 0x0F, 0xE0, - 0x03, 0xFC, 0x00, 0x01, 0xFC, 0x7F, 0x00, 0x1F, 0xC0, 0x00, 0x0F, 0xE1, - 0xFC, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x0F, 0xE0, 0x0F, 0xF0, 0x00, 0x03, - 0xF8, 0x3F, 0x00, 0x7F, 0x80, 0x00, 0x0F, 0xC1, 0xFC, 0x07, 0xFC, 0x00, - 0x00, 0xFE, 0x0F, 0xE0, 0x3F, 0xE0, 0x00, 0x07, 0xF0, 0x3F, 0x01, 0xFF, - 0x00, 0x00, 0x3F, 0x01, 0xFC, 0x1F, 0xFC, 0x00, 0x03, 0xF8, 0x0F, 0xE0, - 0xFF, 0xE0, 0x00, 0x1F, 0xC0, 0x3F, 0x07, 0xFF, 0x80, 0x01, 0xFE, 0x01, - 0xFC, 0x7F, 0xFE, 0x00, 0x1F, 0xE0, 0x0F, 0xE3, 0xFF, 0xFC, 0x01, 0xFE, - 0x00, 0x3F, 0x1F, 0xFF, 0xFE, 0xFF, 0xF0, 0x01, 0xFD, 0xFC, 0xFF, 0xFF, - 0xFF, 0x00, 0x0F, 0xEF, 0xE3, 0xFF, 0xFF, 0xF0, 0x00, 0x3F, 0x7E, 0x0F, - 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xF0, 0x1F, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, - 0x80, 0x3F, 0xFE, 0x00, 0x00, 0x3E, 0x78, 0x00, 0x3F, 0x00, 0x00, 0x00, - 0xE0, 0x30, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x07, 0xC0, 0x0F, 0xFF, 0xE0, - 0x00, 0x00, 0x3F, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x01, 0xF8, 0x3F, 0xFF, - 0xFF, 0x80, 0x00, 0x0F, 0xC7, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7E, 0x7F, - 0xFF, 0xFF, 0xFC, 0x00, 0x03, 0xF7, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x1F, - 0xFF, 0xF8, 0x01, 0xFF, 0xC0, 0x00, 0xFF, 0xFE, 0x00, 0x01, 0xFF, 0x00, - 0x07, 0xFF, 0xE0, 0x00, 0x07, 0xFC, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x0F, - 0xF0, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0x80, 0x0F, 0xFC, 0x00, 0x00, - 0x00, 0xFE, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x03, 0xFE, 0x00, - 0x00, 0x00, 0x1F, 0xC0, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x7E, 0x00, 0xFF, - 0x00, 0x00, 0x00, 0x03, 0xF8, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x1F, 0xC0, - 0x3F, 0x80, 0x00, 0x00, 0x00, 0x7E, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x03, - 0xF0, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x7E, 0x00, 0x00, 0x00, - 0x00, 0xFE, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x1F, 0x80, 0x00, - 0x00, 0x00, 0x3F, 0x80, 0xFC, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x07, 0xE0, - 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x01, - 0xFC, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x3F, - 0xC0, 0x7F, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x03, 0xFC, 0x00, 0x00, 0x00, - 0x0F, 0xF8, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0xFF, 0x80, 0x00, - 0x00, 0x0F, 0xFF, 0x87, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x3F, 0xF8, - 0x00, 0x00, 0x07, 0xFF, 0xF1, 0xFF, 0xC0, 0x00, 0x00, 0x7F, 0xBF, 0x8F, - 0xFF, 0x80, 0x00, 0x07, 0xF9, 0xFE, 0x7F, 0xFE, 0x00, 0x00, 0xFF, 0xC7, - 0xF3, 0xFF, 0xFC, 0x00, 0x1F, 0xFC, 0x3F, 0xDF, 0xFF, 0xFC, 0x07, 0xFF, - 0xC0, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x07, 0xF7, 0xF7, 0xFF, 0xFF, - 0xFF, 0xC0, 0x3F, 0xBF, 0x1F, 0xFF, 0xFF, 0xF8, 0x00, 0xFD, 0xF8, 0x3F, - 0xFF, 0xFF, 0x80, 0x07, 0xFF, 0xC0, 0x7F, 0xFF, 0xF0, 0x00, 0x3F, 0xFE, - 0x00, 0x7F, 0xFC, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x08, 0x00, 0x00, 0x0F, - 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xFD, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xEF, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFB, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0xDF, 0xE0, 0x00, 0x00, 0x00, 0x01, 0xFC, - 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE7, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0xFE, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x0F, 0xF1, 0xFF, 0x80, 0x00, 0x00, - 0x00, 0xFF, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x7F, 0xF8, 0x00, - 0x00, 0x00, 0xFF, 0x83, 0xFF, 0xF0, 0x00, 0x00, 0x0F, 0xF8, 0x1F, 0xFF, - 0xC0, 0x00, 0x00, 0xFF, 0xC0, 0xFD, 0xFF, 0x80, 0x00, 0x1F, 0xFC, 0x07, - 0xE7, 0xFF, 0x00, 0x07, 0xFF, 0xC0, 0x3F, 0x1F, 0xFF, 0x81, 0xFF, 0xFC, - 0x01, 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0x80, 0x0F, 0xC0, 0xFF, 0xFF, 0xFF, - 0xF8, 0x00, 0x7E, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0x03, 0xF0, 0x07, 0xFF, - 0xFF, 0xE0, 0x00, 0x1F, 0x80, 0x07, 0xFF, 0xFC, 0x00, 0x00, 0x78, 0x00, - 0x03, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0xC0, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, - 0xF8, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x01, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xFC, 0x1F, 0xF8, 0x1F, 0xF8, 0x00, 0x07, - 0xFF, 0xE0, 0x0F, 0xF0, 0x03, 0xFE, 0x00, 0x07, 0xFF, 0x80, 0x0F, 0xF0, - 0x00, 0xFF, 0x00, 0x07, 0xFF, 0x00, 0x07, 0xF0, 0x00, 0x3F, 0xC0, 0x07, - 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0x07, 0xFE, 0x00, 0x03, 0xF8, - 0x00, 0x03, 0xF0, 0x07, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xFC, 0x07, - 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFE, 0x03, 0xFC, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x7F, 0x03, 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x83, - 0xFC, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0xC1, 0xFC, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x0F, 0xE1, 0xFE, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x07, 0xE0, - 0xFE, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x07, 0xF0, 0xFE, 0x00, 0x00, 0x01, - 0xFC, 0x00, 0x03, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x03, 0xF8, - 0x7F, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x03, 0xFC, 0x3F, 0x80, 0x00, 0x00, - 0x0F, 0xF8, 0x03, 0xFC, 0x1F, 0x80, 0x00, 0x00, 0x03, 0xFF, 0x9F, 0xFE, - 0x1F, 0xC0, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFE, 0x0F, 0xE0, 0x00, 0x00, - 0x00, 0x7F, 0xFF, 0xFE, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFE, - 0x03, 0xF0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFC, 0x03, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0xF8, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, - 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1E, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0x81, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x7F, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xE0, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF0, 0x01, 0xFF, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x3F, - 0xF0, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x07, 0xFF, - 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x03, 0xFF, - 0xE0, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x0F, 0xFF, 0xE0, 0x00, 0x00, 0x0F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, - 0x07, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFC, 0x00, 0x00, 0x00, - 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFC, 0x00, - 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, - 0xF0, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x1F, 0xF8, 0x00, - 0x7F, 0xFF, 0x80, 0x00, 0xFC, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x07, 0xE0, - 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x01, - 0xF8, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x0F, 0xC0, 0x00, 0x00, 0x03, 0xFE, - 0x00, 0x7E, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x03, 0xF0, 0x00, 0x00, 0x00, - 0x3F, 0xE0, 0x1F, 0x80, 0x00, 0x00, 0x00, 0xFF, 0x80, 0xFC, 0x00, 0x00, - 0x00, 0x03, 0xFE, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x3F, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0xC1, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0F, - 0xC0, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xC3, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x1F, 0x80, 0x00, 0x00, 0x00, - 0x03, 0xF8, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC7, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF9, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0x0F, 0xCF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7E, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xFB, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xDF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xF7, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xBF, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xFD, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7E, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF7, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFD, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7E, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xF3, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x9F, 0x80, - 0x00, 0x00, 0x00, 0x01, 0xFC, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE7, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xF1, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x0F, 0xC0, 0x00, 0x00, 0x00, - 0x03, 0xF8, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x83, 0xF0, 0x00, 0x00, - 0x00, 0x03, 0xFC, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0xFC, 0x00, - 0x00, 0x00, 0x01, 0xFE, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x3F, - 0x00, 0x00, 0x00, 0x01, 0xFE, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0xF0, - 0x0F, 0xC0, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x3F, - 0xF0, 0x03, 0xF0, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x1F, 0x80, 0x00, 0x00, - 0x7F, 0xF0, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x07, 0xF8, 0x00, - 0x03, 0xFF, 0xE0, 0x00, 0x3F, 0xFE, 0x03, 0xFF, 0xFE, 0x00, 0x01, 0xFF, - 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, - 0x3F, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xF0, 0x00, - 0x00, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x9F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x0F, - 0xF8, 0x00, 0x00, 0x00, 0x03, 0xF1, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x1F, - 0xBF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, - 0x07, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFC, 0x00, - 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0xFF, - 0x80, 0x00, 0x00, 0x7F, 0xE0, 0x03, 0xFE, 0x00, 0x00, 0x03, 0xFE, 0x00, - 0x0F, 0xF0, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x1F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, - 0x0F, 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, - 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x7F, 0x00, 0x00, 0x01, - 0xFF, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x7F, 0x80, 0x00, - 0x00, 0x7F, 0xF8, 0x0F, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xC0, - 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, - 0xC0, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x3F, - 0xFF, 0x80, 0x00, 0x00, 0x01, 0xF8, 0x7F, 0xF0, 0x00, 0x00, 0x00, 0x0F, - 0xC0, 0x10, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x31, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, - 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7E, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x03, 0xF3, 0xFF, 0xF8, - 0x00, 0x00, 0x00, 0x1F, 0xBF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0xFF, 0xFF, - 0xFF, 0xC0, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x3F, - 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x7F, 0xE0, 0x00, 0x00, - 0x0F, 0xFE, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xC0, 0x01, 0xFE, 0x00, - 0x00, 0x03, 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x3F, - 0x80, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x00, - 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x01, 0xF8, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x7E, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0x1F, 0xC0, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x3F, 0xC0, 0x00, - 0x7F, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x0F, 0xFC, - 0x00, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xFC, 0x1F, 0xFC, 0x00, 0x00, 0x03, - 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFC, 0x00, 0x00, - 0x00, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x07, 0xEF, 0xFF, 0xFC, 0x00, - 0x00, 0x00, 0x3F, 0x3F, 0xFF, 0x80, 0x00, 0x00, 0x01, 0xF8, 0x3F, 0xF0, - 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, - 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, - 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFC, - 0x00, 0x7F, 0xFF, 0x80, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xE0, - 0x00, 0x07, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x07, 0xFF, 0x00, - 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x01, 0xFE, - 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x07, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x0F, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, - 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xFF, 0xE0, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0x80, - 0x00, 0x1F, 0xFF, 0xFF, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x1F, 0xFF, 0xFF, - 0xC0, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xFF, 0xFF, 0xF0, 0x00, 0x07, 0xE0, - 0x00, 0x0F, 0xF8, 0x0F, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xF0, 0x01, - 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x0F, 0xF0, 0x00, 0x7F, 0x80, 0x01, 0xFC, - 0x00, 0x07, 0xF0, 0x00, 0x1F, 0xC0, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, - 0x0F, 0xE0, 0x00, 0x7E, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0x3F, - 0x00, 0x01, 0xFC, 0x00, 0x01, 0xFC, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, - 0x00, 0x7F, 0xFF, 0xEF, 0xC0, 0x00, 0x7E, 0x00, 0x00, 0x3F, 0xFF, 0xFF, - 0xE0, 0x00, 0x3F, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xF0, 0x00, 0x1F, 0x80, - 0x00, 0x0F, 0xFF, 0xFF, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x0F, 0xFF, 0xFF, - 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x07, 0xFF, 0xFF, 0xFE, 0x00, 0x01, 0xF8, - 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0xFE, 0x00, 0x03, 0xF8, 0x0F, - 0xFF, 0xC0, 0x00, 0x7F, 0x00, 0x03, 0xFC, 0x07, 0xF7, 0xE0, 0x00, 0x1F, - 0xC0, 0x03, 0xFC, 0x03, 0xFB, 0xF0, 0x00, 0x0F, 0xF8, 0x03, 0xFE, 0x01, - 0xFD, 0xFC, 0x00, 0x03, 0xFF, 0x8F, 0xFE, 0x00, 0xFE, 0xFE, 0x00, 0x00, - 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0x3F, 0x00, 0x00, 0x3F, 0xFF, 0xFE, 0x00, - 0x3F, 0x9F, 0xC0, 0x00, 0x0F, 0xFF, 0xFE, 0x00, 0x1F, 0xCF, 0xE0, 0x00, - 0x03, 0xFF, 0xFE, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x00, 0x7F, 0xFC, 0x00, - 0x07, 0xF1, 0xFC, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x03, 0xF8, 0x7F, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xFE, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x03, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x81, 0xFE, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0xC0, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x1F, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x07, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0xF0, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, - 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x1F, 0xF8, 0x00, 0x00, - 0x00, 0x7F, 0xF0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, - 0x01, 0xFF, 0xF0, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, 0x7F, 0xFF, 0x80, - 0x0F, 0xFF, 0xE0, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, - 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0xFF, - 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFE, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0xFE, 0x00, 0x01, 0xFE, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x7F, 0xFE, 0x00, - 0x0F, 0xFF, 0x80, 0x07, 0xFF, 0xFC, 0x00, 0x7F, 0xFC, 0x00, 0xFF, 0xFF, - 0xF0, 0x03, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, 0x00, 0xFF, - 0xFF, 0xFF, 0x00, 0xFF, 0xF8, 0x0F, 0xFF, 0x3F, 0xFC, 0x07, 0xFF, 0xC0, - 0x7F, 0x80, 0x3F, 0xF0, 0x3F, 0xFE, 0x07, 0xF8, 0x00, 0x7F, 0x81, 0xFF, - 0xF0, 0x3F, 0x80, 0x01, 0xFE, 0x0F, 0xFF, 0x83, 0xF8, 0x00, 0x07, 0xF0, - 0x7F, 0xFC, 0x1F, 0xC0, 0x00, 0x3F, 0x83, 0xFF, 0xFF, 0xFC, 0x00, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, - 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC0, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x7F, 0xFF, 0xFF, - 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xFF, 0xFC, 0x1F, 0x80, 0x00, 0x3F, 0x83, - 0xFF, 0xE0, 0xFE, 0x00, 0x01, 0xFC, 0x1F, 0xFF, 0x03, 0xF8, 0x00, 0x1F, - 0xE0, 0xFF, 0xF8, 0x1F, 0xE0, 0x01, 0xFE, 0x07, 0xFF, 0xC0, 0x7F, 0x80, - 0x1F, 0xF0, 0x3F, 0xFE, 0x03, 0xFF, 0x03, 0xFF, 0x01, 0xFF, 0xF0, 0x0F, - 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0x80, 0x3F, 0xFF, 0xFF, 0x80, 0x7F, 0xFC, - 0x00, 0xFF, 0xFF, 0xF8, 0x03, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0x00, 0x1F, - 0xFF, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0xFF, 0xF8, 0x00, 0x0F, 0xFC, 0x00, - 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xE0, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x3E, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x3B, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7F, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xFF, - 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x07, 0xFE, 0x07, 0xFE, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0xE0, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, - 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x1F, 0xE0, 0x00, 0x00, - 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, - 0x0F, 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x1F, - 0xC0, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x03, - 0xF8, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x07, 0xF0, - 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x7F, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x00, 0x03, 0xF8, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x0F, 0xF0, - 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x0F, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0xF9, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, - 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFE, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0xFE, - 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x07, 0xF0, 0x00, - 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x01, 0xFF, 0x00, - 0x00, 0x7F, 0x80, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0xFF, 0x80, 0x00, - 0x00, 0x7F, 0xC0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, - 0x03, 0xFF, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0x00, 0x03, - 0xFF, 0xC0, 0x00, 0x00, 0x0F, 0xFF, 0xC1, 0xFF, 0xFC, 0x00, 0x00, 0x00, - 0x1F, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, - 0x00, 0x00, 0x3E, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x3F, - 0x00, 0x00, 0x01, 0xFF, 0xFE, 0x01, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0xFC, - 0x0F, 0xC0, 0x00, 0x03, 0xFF, 0xFF, 0xF0, 0x7E, 0x00, 0x00, 0x3F, 0xFF, - 0xFF, 0xC3, 0xF0, 0x00, 0x03, 0xFF, 0xFF, 0xFE, 0x1F, 0x80, 0x00, 0x1F, - 0xF0, 0x0F, 0xF8, 0xFC, 0x00, 0x01, 0xFF, 0x00, 0x3F, 0xE7, 0xE0, 0x00, - 0x0F, 0xE0, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0xFF, 0x00, 0x03, 0xFD, 0xF8, - 0x00, 0x07, 0xF0, 0x00, 0x0F, 0xEF, 0xC0, 0x00, 0x7F, 0x00, 0x00, 0x3F, - 0x7E, 0x00, 0x07, 0xF8, 0x00, 0x01, 0xFB, 0xF0, 0x00, 0x7F, 0xC0, 0x00, - 0x0F, 0xFF, 0x80, 0x07, 0xFE, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x7F, 0xF0, - 0x00, 0x03, 0xFF, 0xE0, 0x0F, 0xFF, 0x80, 0x00, 0x1F, 0xFF, 0x00, 0xFF, - 0xFC, 0x00, 0x00, 0xFF, 0xF8, 0x0F, 0xFF, 0xE0, 0x00, 0x07, 0xEF, 0xC0, - 0xFF, 0xFF, 0x80, 0x00, 0x7F, 0x7E, 0x0F, 0xFD, 0xFC, 0x00, 0x03, 0xFB, - 0xF1, 0xFF, 0xC7, 0xF0, 0x00, 0x3F, 0x9F, 0x9F, 0xFF, 0x3F, 0xC0, 0x03, - 0xFC, 0xFD, 0xFF, 0xFC, 0xFF, 0x80, 0x7F, 0xC7, 0xFF, 0xFF, 0xF7, 0xFF, - 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF, 0xE1, 0xFF, 0xF9, 0xFE, - 0x7F, 0xFF, 0xFE, 0x0F, 0xFF, 0x07, 0xF9, 0xFF, 0xFF, 0xE0, 0x7F, 0xF0, - 0x3F, 0xC3, 0xFF, 0xFC, 0x03, 0xFF, 0x00, 0xFF, 0x07, 0xFF, 0x80, 0x1F, - 0xF0, 0x03, 0xFC, 0x07, 0xE0, 0x00, 0xFF, 0x00, 0x0F, 0xE0, 0x00, 0x00, - 0x07, 0xF0, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x01, 0xFE, 0x00, - 0x00, 0x01, 0xF8, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x3F, - 0xC0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x03, 0xF0, 0x00, - 0x03, 0xFC, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x7F, 0x80, 0x00, 0x07, 0xE0, 0x00, 0x01, 0xFE, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x3F, 0xC0, - 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x03, - 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x1F, 0x80, 0x00, - 0x00, 0x7F, 0x80, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x07, 0xE0, - 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x01, - 0xF8, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x03, 0xFC, - 0x00, 0x7E, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x03, 0xF0, 0x00, 0x00, 0x00, - 0x7F, 0x80, 0x1F, 0x80, 0x00, 0x00, 0x01, 0xFE, 0x00, 0xFC, 0x00, 0x00, - 0x00, 0x0F, 0xF0, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x3F, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x0F, - 0xC0, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x7F, - 0x83, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x1F, 0x80, 0x00, 0x00, 0x00, - 0x0F, 0xF0, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC7, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF9, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0xEF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFE, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x78, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xE0, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0E, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xBF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xDF, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xE0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xBF, - 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x1F, 0xF7, 0xFF, 0xCF, 0xFC, 0x00, 0x3F, - 0xFE, 0x00, 0x1F, 0xF3, 0xFF, 0xE3, 0xFF, 0x00, 0x7F, 0xFF, 0xC0, 0x1F, - 0xF1, 0xFF, 0xF0, 0xFF, 0xC0, 0x7F, 0xFF, 0xF0, 0x1F, 0xF0, 0xFF, 0xF8, - 0x3F, 0xF0, 0x7F, 0xFF, 0xFC, 0x1F, 0xF0, 0x7F, 0xFC, 0x0F, 0xFC, 0x7F, - 0xFF, 0xFF, 0x1F, 0xF0, 0x3F, 0xFE, 0x03, 0xFF, 0x7F, 0xC0, 0x7F, 0xDF, - 0xF0, 0x1F, 0xFF, 0x00, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xF0, 0x0F, 0xFF, - 0x80, 0x3F, 0xFF, 0x80, 0x03, 0xFF, 0xF0, 0x07, 0xFF, 0xC0, 0x07, 0xFF, - 0x80, 0x00, 0xFF, 0xF0, 0x03, 0xFF, 0xE0, 0x01, 0xFF, 0xC0, 0x00, 0x3F, - 0xF0, 0x01, 0xFF, 0xF0, 0x00, 0x7F, 0xC0, 0x00, 0x1F, 0xF0, 0x00, 0xFF, - 0xF8, 0x00, 0x1F, 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0xFC, 0x00, 0x07, - 0xE0, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0xFE, 0x00, 0x03, 0xF0, 0x00, 0x01, - 0xF8, 0x00, 0x1F, 0xFF, 0x00, 0x03, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x0F, - 0xFF, 0x80, 0x01, 0xFC, 0x00, 0x00, 0x7E, 0x00, 0x07, 0xFF, 0xC0, 0x00, - 0x7E, 0x00, 0x00, 0x3F, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x3F, 0x80, 0x00, - 0x3F, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x1F, 0xC0, 0x00, 0x1F, 0x80, 0x00, - 0xFF, 0xF8, 0x00, 0x0F, 0xF0, 0x00, 0x1F, 0xC0, 0x00, 0x7F, 0xFC, 0x00, - 0x03, 0xFC, 0x00, 0x1F, 0xE0, 0x00, 0x3F, 0xFE, 0x00, 0x01, 0xFF, 0x00, - 0x1F, 0xE0, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x7F, 0xC0, 0x3F, 0xF0, 0x00, - 0x0F, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xC0, - 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x03, 0xFF, - 0xFF, 0xF0, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0xFF, 0xFF, 0xF0, 0x00, - 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x00, 0x7F, 0xFC, - 0x00, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x00, - 0xFF, 0xC0, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xE0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFE, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF7, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xE7, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xBF, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFE, 0x00, - 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, - 0xE0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, - 0x07, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFE, 0x00, 0x00, - 0x00, 0x01, 0xFF, 0xF7, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x9F, 0xE0, - 0x00, 0x00, 0x00, 0x7F, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xE3, - 0xFC, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0xFF, - 0xF8, 0x7F, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xC1, 0xFE, 0x00, 0x00, 0x00, - 0x3F, 0xFE, 0x07, 0xF8, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x3F, 0xC0, 0x00, - 0x00, 0x0F, 0xFF, 0x80, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x03, 0xFC, - 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x0F, 0xF0, 0x00, 0x00, 0x1F, 0xFF, 0x00, - 0x7F, 0x80, 0x00, 0x00, 0xFF, 0xF8, 0x01, 0xFE, 0x00, 0x00, 0x07, 0xFF, - 0xC0, 0x07, 0xF8, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x3F, 0xC0, 0x00, 0x01, - 0xFF, 0xF0, 0x00, 0xFF, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x03, 0xFC, 0x00, - 0x00, 0x7F, 0xFC, 0x00, 0x1F, 0xE0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x7F, - 0x80, 0x00, 0x1F, 0xFF, 0x00, 0x01, 0xFE, 0x00, 0x00, 0xFF, 0xF8, 0x00, - 0x07, 0xF8, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x3F, 0xC0, 0x00, 0x3F, 0xFE, - 0x00, 0x00, 0xFF, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x0F, - 0xFF, 0x80, 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x7F, 0x80, - 0x03, 0xFF, 0xE0, 0x00, 0x01, 0xFE, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x0F, - 0xF0, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x3F, 0xC0, 0x07, 0xFF, 0xC0, 0x00, - 0x00, 0xFF, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x03, 0xFC, 0x01, 0xFF, 0xF0, - 0x00, 0x00, 0x1F, 0xE0, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0x80, 0x7F, - 0xFC, 0x00, 0x00, 0x01, 0xFE, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x0F, 0xF0, - 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0xFF, 0xF8, 0x00, 0x00, 0x00, - 0xFF, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x07, 0xF8, 0x3F, 0xFE, 0x00, 0x00, - 0x00, 0x1F, 0xE1, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x7F, 0x8F, 0xFF, 0x80, - 0x00, 0x00, 0x01, 0xFE, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xF3, 0xFF, - 0xE0, 0x00, 0x00, 0x00, 0x3F, 0xDF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, - 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, - 0x1F, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0x00, - 0x00, 0x03, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x3E, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, - 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, - 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0x80, 0x00, 0x00, - 0x07, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xFF, 0x80, - 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x0F, - 0xFE, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x00, - 0x07, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x07, 0xFE, 0x00, - 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xFE, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x80, - 0x03, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x03, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xFC, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, - 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0xFE, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x7F, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xF8, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x1F, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x1F, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0x8F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0xC7, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF3, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF9, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7E, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x7E, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xBF, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xDF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7E, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xBF, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xCF, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xE7, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xF3, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF1, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x7E, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFE, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x07, 0xE0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x03, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7F, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0x80, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x3F, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x0F, 0xF0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0xE0, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, - 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x1F, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0xF0, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, - 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x1F, 0xF8, - 0x00, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, - 0xFF, 0xF0, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xF0, 0x00, - 0x00, 0x00, 0x7F, 0xFF, 0xC0, 0x3F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x0F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, - 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0x80, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x7F, - 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC0, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x01, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, - 0xFF, 0xF8, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x01, 0xF8, 0x00, 0x00, - 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x07, 0xE0, 0x00, - 0x00, 0x00, 0x07, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFF, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x1F, 0x80, - 0x00, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x7F, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x7E, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, - 0x00, 0xFE, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x03, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x03, 0xFF, 0xE0, 0x00, 0x00, - 0x00, 0x01, 0xFC, 0x03, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x03, - 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x1F, 0xC1, 0xFF, 0xFF, 0xF8, 0x00, - 0x00, 0x00, 0x07, 0xF0, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01, 0xFC, - 0x7F, 0xF0, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x7F, 0x1F, 0xF0, 0x07, 0xFC, - 0x00, 0x00, 0x00, 0x1F, 0xCF, 0xF0, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x07, - 0xF3, 0xF8, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x01, 0xFD, 0xFE, 0x00, 0x03, - 0xF8, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, - 0x1F, 0x9F, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0xE7, 0xE0, 0x00, - 0x07, 0xF0, 0x00, 0x00, 0x03, 0xFB, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0x01, 0xFE, 0xFE, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7F, 0x3F, 0x80, - 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x3F, 0xC7, 0xE0, 0x00, 0x07, 0xF0, 0x00, - 0x00, 0x0F, 0xE1, 0xF8, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x07, 0xF8, 0x7F, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x03, 0xFC, 0x1F, 0xC0, 0x00, 0x3F, 0x80, - 0x00, 0x01, 0xFF, 0x03, 0xF8, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xFF, 0x80, - 0xFF, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x7F, 0xC0, 0x1F, 0xE0, 0x07, 0xFC, - 0x00, 0x00, 0x7F, 0xE0, 0x07, 0xFE, 0x07, 0xFF, 0xC0, 0x00, 0x7F, 0xF0, - 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, - 0x00, 0x00, 0x7F, 0xFF, 0xEF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x07, 0xFF, - 0xF0, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x0F, 0xFF, 0xFE, - 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, - 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xE0, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0xFF, 0xFC, 0x00, 0x00, - 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xFC, - 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, - 0x3F, 0xF0, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x00, - 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x0F, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x0F, 0xF0, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF8, - 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x07, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x07, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xC0, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xF0, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x01, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0xC0, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x7F, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x3F, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xF8, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7E, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x07, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x87, 0xF0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC3, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0xE1, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x7E, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0x8F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC7, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE3, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xF1, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xF0, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x3F, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7E, 0x7E, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, - 0xFF, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x01, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0x80, 0xFE, 0x00, 0x00, 0x00, - 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, - 0xFF, 0xF0, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x9F, 0xFC, 0x0F, - 0xE0, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x01, 0xFF, 0x03, 0xF8, 0x00, 0x00, - 0x00, 0x03, 0xFC, 0x00, 0x7F, 0x81, 0xFE, 0x00, 0x00, 0x00, 0x01, 0xFC, - 0x00, 0x1F, 0xE0, 0x7F, 0x80, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x07, 0xF0, - 0x1F, 0xC0, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xF8, 0x0F, 0xF0, 0x00, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0xFC, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x7F, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x3F, - 0x80, 0x3F, 0xE0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x1F, 0xC0, 0x0F, 0xF8, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xE0, 0x03, 0xFF, 0x00, 0x00, 0x03, - 0xF0, 0x00, 0x07, 0xE0, 0x00, 0xFF, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x03, - 0xF0, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x0F, - 0xFF, 0xE0, 0x01, 0xFF, 0x80, 0x01, 0xFC, 0x00, 0x01, 0xFF, 0xFF, 0xFF, - 0xFF, 0xE0, 0x01, 0xFC, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xF8, 0x01, - 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFE, 0x00, 0x00, - 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, - 0xFF, 0xBF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFC, 0x0F, 0xFF, - 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, - 0x40, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x07, 0xC0, 0x00, 0x03, 0xFF, 0xFE, - 0x00, 0x1F, 0x80, 0x00, 0x3F, 0xFF, 0xFE, 0x00, 0xFE, 0x00, 0x01, 0xFF, - 0xFF, 0xFC, 0x03, 0xFC, 0x00, 0x1F, 0xFF, 0xFF, 0xFC, 0x0F, 0xF8, 0x00, - 0xFF, 0xFF, 0xFF, 0xF8, 0x3F, 0xE0, 0x07, 0xFF, 0x80, 0xFF, 0xF0, 0xFF, - 0xC0, 0x1F, 0xF0, 0x00, 0x7F, 0xC3, 0xFF, 0x80, 0xFF, 0x80, 0x00, 0xFF, - 0x8F, 0xFE, 0x07, 0xF8, 0x00, 0x01, 0xFF, 0x3F, 0xFC, 0x1F, 0xC0, 0x00, - 0x03, 0xFC, 0xFF, 0xF8, 0xFE, 0x00, 0x00, 0x07, 0xFB, 0xFF, 0xF3, 0xF8, - 0x00, 0x00, 0x0F, 0xEF, 0xFF, 0xCF, 0xC0, 0x00, 0x00, 0x3F, 0xBF, 0xFF, - 0xFF, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0xFF, 0xF8, 0x00, 0x00, 0x01, 0xFF, - 0xF9, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xFF, 0xE3, 0xFF, 0x80, 0x00, 0x00, - 0x0F, 0xFF, 0x8F, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x1F, 0xF8, 0x00, - 0x00, 0x00, 0xFF, 0xF8, 0x3F, 0xE0, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0xFF, - 0x80, 0x00, 0x00, 0x0F, 0xFF, 0x81, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFE, - 0x03, 0xFC, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x0F, 0xF0, 0x00, 0x00, 0x07, - 0xFF, 0xE0, 0x1F, 0xE0, 0x00, 0x00, 0x3F, 0xBF, 0x80, 0x3F, 0x80, 0x00, - 0x00, 0xFE, 0xFE, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xF3, 0xF8, 0x01, 0xFE, - 0x00, 0x00, 0x3F, 0xCF, 0xE0, 0x03, 0xFC, 0x00, 0x01, 0xFE, 0x3F, 0x80, - 0x07, 0xF8, 0x00, 0x0F, 0xF8, 0xFE, 0x00, 0x1F, 0xF8, 0x00, 0xFF, 0xC3, - 0xF8, 0x00, 0x3F, 0xFE, 0x3F, 0xFE, 0x0F, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, - 0xF0, 0x3F, 0x80, 0x01, 0xFF, 0xFF, 0xFF, 0x80, 0xFE, 0x00, 0x03, 0xFF, - 0xFF, 0xFC, 0x03, 0xF8, 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x0F, 0xE0, 0x00, - 0x0F, 0xFF, 0xFC, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0xFF, 0x80, 0x00, 0xFE, - 0x00, 0x00, 0x7F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0x0F, 0xE0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, 0xF8, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0x3F, 0xC0, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x3F, 0x80, - 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x03, - 0xF8, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x0F, 0xF0, - 0x00, 0x3F, 0x80, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0xFE, 0x00, 0x00, 0x00, - 0x7F, 0x80, 0x03, 0xF8, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x0F, 0xE0, 0x00, - 0x00, 0x01, 0xFE, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x03, 0xF8, 0x00, 0xFE, - 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0xE0, - 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x3F, 0x80, 0x00, 0x00, 0x00, - 0xFF, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x03, 0xF8, 0x00, 0x00, - 0x00, 0x03, 0xF8, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x3F, 0x80, - 0x00, 0x00, 0x00, 0x1F, 0xE0, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x83, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x01, - 0xFE, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x03, 0xFC, 0xFE, 0x00, 0x00, 0x00, - 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xCF, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x38, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xE0, - 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x07, 0xFF, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x01, - 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x3F, 0x00, - 0x00, 0x01, 0xFF, 0xF0, 0x00, 0xFC, 0x00, 0x00, 0x1F, 0xFF, 0xE0, 0x03, - 0xF0, 0x00, 0x00, 0xFF, 0xFF, 0xE0, 0x0F, 0xE0, 0x00, 0x07, 0xFF, 0xFF, - 0xC0, 0x1F, 0x80, 0x00, 0x3F, 0xFF, 0xFF, 0x80, 0x7F, 0x00, 0x01, 0xFF, - 0xFF, 0xFF, 0x00, 0xFE, 0x00, 0x07, 0xF8, 0x07, 0xFC, 0x03, 0xF8, 0x00, - 0x3F, 0xC0, 0x07, 0xF8, 0x07, 0xF0, 0x00, 0xFE, 0x00, 0x0F, 0xE0, 0x1F, - 0xE0, 0x07, 0xF0, 0x00, 0x1F, 0x80, 0x3F, 0xC0, 0x1F, 0xC0, 0x00, 0x7F, - 0x00, 0x7F, 0xC0, 0x7E, 0x00, 0x00, 0xFC, 0x01, 0xFF, 0x83, 0xF8, 0x00, - 0x03, 0xF0, 0x03, 0xFF, 0xCF, 0xE0, 0x00, 0x0F, 0xC0, 0x07, 0xFF, 0xFF, - 0x80, 0x00, 0x3F, 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x00, 0xFC, 0x00, 0x0F, - 0xFF, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x0F, 0xC0, - 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x03, - 0xF8, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x03, 0xFC, - 0x00, 0xFF, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x07, 0xFC, 0x00, 0x00, 0x00, - 0x0F, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0x01, 0x00, - 0x00, 0x00, 0x3F, 0xFF, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x80, - 0x7C, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x7F, - 0xE0, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x1F, 0xE0, 0x00, 0x00, - 0x01, 0xFC, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0x80, - 0x00, 0x00, 0x7F, 0x80, 0x01, 0xFF, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x03, - 0xFE, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x07, 0xFF, 0x00, 0x03, 0xFF, 0x80, - 0x00, 0x0F, 0xFF, 0x80, 0x7F, 0xFC, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, - 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0xFF, - 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0x80, 0xFF, - 0xFF, 0xFF, 0xFE, 0x3F, 0xC0, 0x07, 0xFF, 0xFF, 0xFF, 0x0F, 0xF0, 0x00, - 0x7F, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x01, 0xFC, - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x07, - 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0x1F, 0x80, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xF8, 0x00, 0x03, 0xF0, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x1F, 0xC0, - 0x00, 0x00, 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0xFE, - 0x00, 0x00, 0x01, 0xFE, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x1F, 0xF8, 0x3F, - 0xF0, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0xFF, - 0xFF, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x1F, - 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x43, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xBF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0xFE, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, - 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0xBF, 0x80, 0x00, 0x00, 0x00, 0x00, 0xFD, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE7, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x7F, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0x87, 0xE0, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x3F, 0x80, 0x00, - 0x00, 0x00, 0x0F, 0xE1, 0xFE, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x07, 0xF0, - 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0x00, - 0xFF, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x7F, - 0x80, 0x1F, 0xF0, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x7F, 0xC0, 0x00, 0x00, - 0xFF, 0xC0, 0x01, 0xFF, 0x80, 0x00, 0x1F, 0xFC, 0x00, 0x07, 0xFF, 0x80, - 0x03, 0xFF, 0xC0, 0x00, 0x1F, 0xFF, 0xE3, 0xFF, 0xFC, 0x00, 0x00, 0x7F, - 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, - 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xF0, 0x00, - 0x00, 0x00, 0x07, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFE, 0x00, - 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xCF, 0xE0, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x7F, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0xE1, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x0F, 0xE0, 0x00, 0x00, - 0x00, 0x07, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x81, 0xFC, 0x00, - 0x00, 0x00, 0x01, 0xFC, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x3F, - 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x07, 0xF0, - 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x03, - 0xF8, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x0F, 0xE0, 0x00, 0x00, - 0x01, 0xFC, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x01, 0xFC, 0x00, - 0x00, 0x00, 0x7E, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x3F, - 0x00, 0x00, 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x00, 0x01, 0xF8, 0x00, - 0x0F, 0xE0, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x00, 0xFE, - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x0F, 0xE0, 0x00, 0x00, - 0x7F, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x3F, 0x80, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, - 0x80, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0x0F, 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0x80, - 0x00, 0x01, 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x1F, - 0xC0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0x00, - 0x0F, 0xE0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x3F, - 0x80, 0x03, 0xF8, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x3F, 0x80, 0x00, 0x00, - 0x07, 0xE0, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x0F, 0xC0, 0x00, - 0x00, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x07, 0xF0, - 0x00, 0x00, 0x00, 0x3F, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x03, - 0xF8, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x3F, - 0x81, 0xFC, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x0F, 0xE0, 0x00, 0x00, 0x00, - 0x07, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x87, 0xF0, 0x00, 0x00, - 0x00, 0x01, 0xFC, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x07, 0xE1, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0x9F, 0xC0, 0x00, 0x00, 0x00, 0x01, 0xFC, 0xFE, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x7C, 0x00, 0x03, 0xC0, 0x00, 0x00, 0xF0, 0x00, 0x0F, - 0xBF, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xFC, 0x00, 0x0F, 0xDF, 0x80, 0x01, - 0xF8, 0x00, 0x00, 0x7E, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0xFE, 0x00, 0x00, - 0x7F, 0x00, 0x07, 0xF7, 0xF0, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0x80, 0x03, - 0xF9, 0xF8, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x80, 0x01, 0xFC, 0xFE, 0x00, - 0x0F, 0xE0, 0x00, 0x1F, 0xC0, 0x01, 0xFC, 0x7F, 0x00, 0x07, 0xF0, 0x00, - 0x0F, 0xE0, 0x00, 0xFE, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x07, 0xE0, 0x00, - 0x7F, 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0x07, 0xF0, - 0x00, 0x7F, 0x00, 0x03, 0xF8, 0x00, 0x3F, 0x81, 0xF8, 0x00, 0x1F, 0x80, - 0x01, 0xF8, 0x00, 0x1F, 0xC0, 0xFE, 0x00, 0x0F, 0xE0, 0x01, 0xFC, 0x00, - 0x1F, 0xC0, 0x7F, 0x00, 0x07, 0xF0, 0x00, 0xFE, 0x00, 0x0F, 0xE0, 0x1F, - 0x80, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x07, 0xF0, 0x0F, 0xE0, 0x00, 0xFE, - 0x00, 0x7F, 0x00, 0x07, 0xF0, 0x07, 0xF0, 0x00, 0x7F, 0x00, 0x3F, 0x80, - 0x03, 0xF8, 0x01, 0xF8, 0x00, 0x1F, 0xC0, 0x1F, 0x80, 0x03, 0xF8, 0x00, - 0xFE, 0x00, 0x0F, 0xE0, 0x1F, 0xC0, 0x01, 0xFC, 0x00, 0x7F, 0x00, 0x07, - 0xF0, 0x0F, 0xE0, 0x00, 0xFE, 0x00, 0x1F, 0xC0, 0x01, 0xFF, 0xFF, 0xE0, - 0x00, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x7F, 0x00, - 0x07, 0xF0, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x3F, 0x80, 0x01, 0xFC, 0x00, - 0x3F, 0xFF, 0xFC, 0x00, 0x3F, 0x80, 0x00, 0xFE, 0x00, 0x3F, 0xFF, 0xFF, - 0x00, 0x1F, 0xC0, 0x00, 0x7F, 0x00, 0x3F, 0xFF, 0xFF, 0xC0, 0x0F, 0xE0, - 0x00, 0x1F, 0xC0, 0x3F, 0xFC, 0xFF, 0xF0, 0x0F, 0xE0, 0x00, 0x0F, 0xE0, - 0x1F, 0xF0, 0x0F, 0xF8, 0x07, 0xF0, 0x00, 0x07, 0xF0, 0x1F, 0xE0, 0x01, - 0xFE, 0x03, 0xF8, 0x00, 0x01, 0xFC, 0x0F, 0xE0, 0x00, 0x7F, 0x03, 0xF8, - 0x00, 0x00, 0xFE, 0x0F, 0xF0, 0x00, 0x1F, 0xC1, 0xFC, 0x00, 0x00, 0x3F, - 0x07, 0xF0, 0x00, 0x0F, 0xE0, 0xFE, 0x00, 0x00, 0x1F, 0xC3, 0xF8, 0x00, - 0x03, 0xF0, 0xFE, 0x00, 0x00, 0x0F, 0xE1, 0xF8, 0x00, 0x01, 0xFC, 0x7F, - 0x00, 0x00, 0x03, 0xF0, 0xFC, 0x00, 0x00, 0xFE, 0x3F, 0x80, 0x00, 0x01, - 0xFC, 0x7E, 0x00, 0x00, 0x7F, 0x3F, 0x80, 0x00, 0x00, 0xFE, 0x3F, 0x00, - 0x00, 0x3F, 0x9F, 0xC0, 0x00, 0x00, 0x3F, 0x1F, 0x80, 0x00, 0x1F, 0xCF, - 0xE0, 0x00, 0x00, 0x1F, 0xCF, 0xC0, 0x00, 0x0F, 0xCF, 0xE0, 0x00, 0x00, - 0x0F, 0xE7, 0xF0, 0x00, 0x0F, 0xE7, 0xF0, 0x00, 0x00, 0x03, 0xF3, 0xF8, - 0x00, 0x07, 0xF3, 0xF8, 0x00, 0x00, 0x01, 0xFC, 0xFE, 0x00, 0x07, 0xFB, - 0xF8, 0x00, 0x00, 0x00, 0xFE, 0x7F, 0x80, 0x07, 0xF9, 0xFC, 0x00, 0x00, - 0x00, 0x3F, 0x1F, 0xE0, 0x07, 0xFD, 0xFC, 0x00, 0x00, 0x00, 0x1F, 0xC7, - 0xFE, 0x1F, 0xFC, 0xFE, 0x00, 0x00, 0x00, 0x0F, 0xE3, 0xFF, 0xFF, 0xFC, - 0x7F, 0x00, 0x00, 0x00, 0x03, 0xF8, 0xFF, 0xFF, 0xFC, 0x7F, 0x00, 0x00, - 0x00, 0x01, 0xFC, 0x3F, 0xFF, 0xFC, 0x3F, 0x80, 0x00, 0x00, 0x00, 0xFE, - 0x07, 0xFF, 0xFC, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0x81, 0xFF, 0xF8, - 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0xFF, 0xFC, 0x0F, 0xE0, 0x00, - 0x00, 0x00, 0x0F, 0xE0, 0x7E, 0x7E, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x03, - 0xF8, 0x7F, 0x3F, 0x87, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x3F, 0x9F, - 0xC3, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x1F, 0x87, 0xE1, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0x9F, 0xC3, 0xF9, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0xCF, 0xE1, 0xFC, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE7, 0xE0, - 0x7E, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xF0, 0x3F, 0xFF, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0xF8, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, - 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0xFF, 0xE0, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xFF, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, - 0x80, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x07, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x03, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xE0, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x3F, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0x00, - 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0xE0, 0x00, 0x00, 0x00, - 0x00, 0x0F, 0xBF, 0x80, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xBF, 0xC0, - 0x00, 0x00, 0x00, 0x07, 0xF9, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x87, - 0xF8, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x3F, - 0xC0, 0x7F, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x03, 0xFC, 0x00, 0x00, 0x00, - 0x1F, 0xC0, 0x0F, 0xF0, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x3F, 0xC0, 0x00, - 0x00, 0x1F, 0xE0, 0x01, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x07, 0xF8, - 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0xFF, 0x00, 0x00, - 0xFF, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x7F, 0x80, - 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x7F, - 0x80, 0x00, 0x01, 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x07, 0xF9, 0xFF, - 0x3F, 0xC0, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0xFF, - 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, - 0x0F, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, - 0x00, 0x07, 0xFF, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x1F, 0xF0, - 0x00, 0x00, 0x07, 0xF8, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x3F, 0x80, 0x01, - 0xFE, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x1F, 0xC0, - 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x1F, 0x80, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x07, 0xE0, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x03, - 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFE, 0x00, - 0x01, 0xFC, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x1F, - 0xE0, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x1F, 0xF0, 0x00, 0x00, - 0x03, 0xFF, 0x83, 0xFF, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x00, - 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFE, - 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x01, 0xFF, 0xFF, - 0xFF, 0xC0, 0x00, 0x00, 0x1F, 0xEF, 0xFE, 0xFF, 0x00, 0x00, 0x01, 0xFE, - 0x00, 0x03, 0xF8, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x1F, 0xE0, 0x00, 0x00, - 0xFF, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x0F, 0xF0, 0x00, 0x01, 0xFE, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x3F, - 0xC0, 0x00, 0x7F, 0x80, 0x00, 0x00, 0xFF, 0x00, 0x07, 0xF8, 0x00, 0x00, - 0x07, 0xF8, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x1F, 0xE0, 0x03, 0xFC, 0x00, - 0x00, 0x00, 0x7F, 0x80, 0x3F, 0xC0, 0x00, 0x00, 0x01, 0xFC, 0x01, 0xFE, - 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0xC1, - 0xFE, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x07, - 0xF8, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xEF, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x38, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xBF, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xDF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF7, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF9, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0xF8, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x1F, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0xF8, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x7F, - 0xC0, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x00, - 0x0F, 0xF8, 0x00, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x01, - 0xFF, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, - 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, - 0x07, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00, - 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x0F, 0xF8, 0x00, 0x00, - 0x00, 0x1F, 0xF0, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x07, 0xFC, 0xFF, - 0x8F, 0xF8, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, - 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, - 0x03, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x7F, 0xC0, 0x00, - 0x00, 0x00, 0x01, 0xFE, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0xFE, - 0x00, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0xC0, - 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xF8, - 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0xE0, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x7F, - 0x80, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0xE1, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x7F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3F, 0xC0, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, - 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x01, 0xFF, 0xFF, 0x80, 0x00, - 0x00, 0xFF, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x01, 0xFE, 0x00, 0x07, - 0xFF, 0xFF, 0xF0, 0x00, 0x01, 0xFE, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x00, - 0x03, 0xFC, 0x00, 0x1F, 0xF8, 0x3F, 0xF8, 0x00, 0x07, 0xF8, 0x00, 0x3F, - 0xE0, 0x07, 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x3F, 0xC0, 0x03, 0xFC, 0x00, - 0x0F, 0xF0, 0x00, 0x7F, 0x80, 0x01, 0xFE, 0x00, 0x1F, 0xE0, 0x00, 0x7F, - 0x00, 0x00, 0xFE, 0x00, 0x1F, 0xC0, 0x00, 0x7E, 0x00, 0x00, 0xFE, 0x00, - 0x3F, 0xC0, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x00, 0x7F, 0x80, 0x00, 0xFE, - 0x00, 0x00, 0x7F, 0x00, 0xFF, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7F, 0x00, - 0xFF, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7F, 0x01, 0xFE, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x7F, 0x03, 0xFC, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x03, - 0xF8, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x7E, 0x07, 0xF8, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0xFE, 0x0F, 0xF0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0xFE, 0x0F, - 0xE0, 0x00, 0x00, 0x7F, 0x80, 0x01, 0xFE, 0x1F, 0xE0, 0x00, 0x00, 0x3F, - 0x80, 0x03, 0xFC, 0x3F, 0xC0, 0x00, 0x00, 0x3F, 0xE0, 0x07, 0xFC, 0x7F, - 0x80, 0x00, 0x00, 0x1F, 0xF8, 0x3F, 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x01, 0xFF, - 0x00, 0x3F, 0xF0, 0x07, 0xFF, 0x00, 0x7F, 0xF0, 0x0F, 0xFF, 0x00, 0xFF, - 0x00, 0x0F, 0xC0, 0x01, 0xFC, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x1F, - 0x80, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x01, - 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, - 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x3F, 0x00, - 0x03, 0xF0, 0x00, 0x7F, 0x00, 0x0F, 0xE0, 0x01, 0xFE, 0x00, 0xFF, 0xC0, - 0x0F, 0xF0, 0x00, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0xFF, 0x00, 0x0F, 0xFC, - 0x00, 0x1F, 0xC0, 0x00, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x3F, 0x00, 0x03, - 0xF0, 0x00, 0x1F, 0x00, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, - 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x1F, 0x80, - 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xF8, - 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x0F, - 0xC0, 0x00, 0xFE, 0x00, 0x0F, 0xFF, 0x00, 0x7F, 0xF0, 0x07, 0xFF, 0x00, - 0x3F, 0xF0, 0x01, 0xFF, 0x00, 0x07, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFE, 0xFC, 0x00, 0x0F, 0xF0, 0x00, 0xFF, 0xC0, 0x0F, 0xFC, 0x00, 0xFF, - 0xE0, 0x0F, 0xFE, 0x00, 0x0F, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, - 0x3F, 0x00, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x01, 0xF0, 0x00, 0x1F, 0x00, - 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xF8, - 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x1F, - 0x80, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x00, - 0xFE, 0x00, 0x07, 0xF8, 0x00, 0x3F, 0xF0, 0x01, 0xFF, 0x00, 0x07, 0xF0, - 0x00, 0x7F, 0x00, 0x1F, 0xF0, 0x03, 0xFF, 0x00, 0x7F, 0x80, 0x07, 0xE0, - 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xF8, - 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x1F, - 0x80, 0x01, 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x01, - 0xF0, 0x00, 0x1F, 0x00, 0x01, 0xF0, 0x00, 0x1F, 0x00, 0x01, 0xF0, 0x00, - 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x0F, 0xF0, 0x0F, 0xFE, 0x00, - 0xFF, 0xE0, 0x0F, 0xFC, 0x00, 0xFF, 0xC0, 0x0F, 0xF0, 0x00, 0xFC, 0x00, - 0x00, 0x03, 0xF8, 0x00, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x04, 0x7F, 0xFF, - 0x00, 0x01, 0x9F, 0xFF, 0xF8, 0x00, 0x77, 0xFF, 0xFF, 0xC0, 0x1F, 0xFF, - 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, - 0xF0, 0x03, 0xFF, 0xFF, 0xDC, 0x00, 0x1F, 0xFF, 0xF3, 0x00, 0x00, 0xFF, - 0xFC, 0x40, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0x80 }; - -static const GFXglyph Quito36pt7bGlyphs[] = { - { 0, 0, 0, 36, 0, 1 }, // 0x20 ' ' - { 0, 8, 51, 20, 6, -50 }, // 0x21 '!' - { 51, 19, 18, 25, 3, -50 }, // 0x22 '"' - { 94, 38, 51, 39, 1, -50 }, // 0x23 '#' - { 337, 54, 79, 73, 9, -75 }, // 0x24 '$' - { 871, 55, 53, 63, 4, -51 }, // 0x25 '%' - { 1236, 43, 53, 47, 3, -51 }, // 0x26 '&' - { 1521, 7, 18, 14, 3, -50 }, // 0x27 ''' - { 1537, 17, 65, 24, 4, -50 }, // 0x28 '(' - { 1676, 17, 65, 24, 4, -50 }, // 0x29 ')' - { 1815, 23, 22, 28, 2, -50 }, // 0x2A '*' - { 1879, 34, 34, 41, 4, -41 }, // 0x2B '+' - { 2024, 7, 17, 20, 6, -5 }, // 0x2C ',' - { 2039, 19, 6, 24, 2, -20 }, // 0x2D '-' - { 2054, 8, 6, 20, 6, -5 }, // 0x2E '.' - { 2060, 20, 51, 20, 0, -50 }, // 0x2F '/' - { 2188, 33, 52, 39, 3, -50 }, // 0x30 '0' - { 2403, 18, 51, 39, 8, -50 }, // 0x31 '1' - { 2518, 34, 51, 39, 2, -50 }, // 0x32 '2' - { 2735, 33, 52, 39, 3, -50 }, // 0x33 '3' - { 2950, 35, 50, 39, 1, -49 }, // 0x34 '4' - { 3169, 34, 51, 39, 3, -49 }, // 0x35 '5' - { 3386, 33, 52, 39, 3, -50 }, // 0x36 '6' - { 3601, 33, 50, 39, 3, -49 }, // 0x37 '7' - { 3808, 33, 52, 39, 3, -50 }, // 0x38 '8' - { 4023, 33, 52, 39, 3, -50 }, // 0x39 '9' - { 4238, 8, 37, 20, 6, -36 }, // 0x3A ':' - { 4275, 7, 48, 20, 6, -36 }, // 0x3B ';' - { 4317, 34, 33, 41, 4, -41 }, // 0x3C '<' - { 4458, 34, 22, 41, 4, -35 }, // 0x3D '=' - { 4552, 34, 33, 41, 4, -41 }, // 0x3E '>' - { 4693, 33, 52, 39, 3, -51 }, // 0x3F '?' - { 4908, 66, 67, 72, 4, -51 }, // 0x40 '@' - { 5461, 53, 73, 73, 10, -72 }, // 0x41 'A' - { 5945, 53, 73, 73, 10, -72 }, // 0x42 'B' - { 6429, 65, 73, 73, 4, -72 }, // 0x43 'C' - { 7023, 53, 73, 73, 10, -72 }, // 0x44 'D' - { 7507, 53, 73, 73, 10, -72 }, // 0x45 'E' - { 7991, 53, 73, 73, 10, -72 }, // 0x46 'F' - { 8475, 65, 73, 73, 4, -72 }, // 0x47 'G' - { 9069, 53, 73, 73, 10, -72 }, // 0x48 'H' - { 9553, 6, 73, 28, 10, -72 }, // 0x49 'I' - { 9608, 62, 72, 73, 5, -71 }, // 0x4A 'J' - { 10166, 53, 73, 73, 10, -72 }, // 0x4B 'K' - { 10650, 53, 73, 73, 10, -72 }, // 0x4C 'L' - { 11134, 73, 71, 92, 10, -70 }, // 0x4D 'M' - { 11782, 53, 73, 73, 10, -72 }, // 0x4E 'N' - { 12266, 73, 73, 73, 0, -72 }, // 0x4F 'O' - { 12933, 66, 73, 73, 3, -72 }, // 0x50 'P' - { 13536, 73, 72, 73, 0, -71 }, // 0x51 'Q' - { 14193, 54, 73, 73, 9, -72 }, // 0x52 'R' - { 14686, 54, 72, 73, 9, -71 }, // 0x53 'S' - { 15172, 51, 73, 73, 13, -72 }, // 0x54 'T' - { 15638, 53, 73, 73, 10, -72 }, // 0x55 'U' - { 16122, 53, 73, 73, 10, -72 }, // 0x56 'V' - { 16606, 73, 73, 73, 0, -72 }, // 0x57 'W' - { 17273, 53, 73, 73, 10, -72 }, // 0x58 'X' - { 17757, 65, 73, 73, 4, -72 }, // 0x59 'Y' - { 18351, 64, 73, 87, 10, -72 }, // 0x5A 'Z' - { 18935, 14, 65, 20, 5, -50 }, // 0x5B '[' - { 19049, 20, 51, 20, 0, -50 }, // 0x5C '\' - { 19177, 14, 65, 20, 1, -50 }, // 0x5D ']' - { 19291, 29, 27, 33, 2, -51 }, // 0x5E '^' - { 19389, 41, 6, 39, -1, 9 }, // 0x5F '_' - { 19420, 13, 10, 24, 3, -50 }, // 0x60 '`' - { 19437, 53, 73, 73, 10, -72 }, // 0x61 'a' - { 19921, 53, 73, 73, 10, -72 }, // 0x62 'b' - { 20405, 65, 73, 73, 4, -72 }, // 0x63 'c' - { 20999, 53, 73, 73, 10, -72 }, // 0x64 'd' - { 21483, 53, 73, 73, 10, -72 }, // 0x65 'e' - { 21967, 53, 73, 73, 10, -72 }, // 0x66 'f' - { 22451, 65, 73, 73, 4, -72 }, // 0x67 'g' - { 23045, 53, 73, 73, 10, -72 }, // 0x68 'h' - { 23529, 6, 73, 28, 10, -72 }, // 0x69 'i' - { 23584, 62, 72, 73, 5, -71 }, // 0x6A 'j' - { 24142, 53, 73, 73, 10, -72 }, // 0x6B 'k' - { 24626, 53, 73, 73, 10, -72 }, // 0x6C 'l' - { 25110, 73, 71, 92, 10, -70 }, // 0x6D 'm' - { 25758, 53, 73, 73, 10, -72 }, // 0x6E 'n' - { 26242, 73, 73, 73, 0, -72 }, // 0x6F 'o' - { 26909, 66, 73, 73, 3, -72 }, // 0x70 'p' - { 27512, 73, 72, 73, 0, -71 }, // 0x71 'q' - { 28169, 54, 73, 73, 9, -72 }, // 0x72 'r' - { 28662, 54, 72, 73, 9, -71 }, // 0x73 's' - { 29148, 51, 73, 73, 13, -72 }, // 0x74 't' - { 29614, 53, 73, 73, 10, -72 }, // 0x75 'u' - { 30098, 53, 73, 73, 10, -72 }, // 0x76 'v' - { 30582, 73, 73, 73, 0, -72 }, // 0x77 'w' - { 31249, 53, 73, 73, 10, -72 }, // 0x78 'x' - { 31733, 65, 73, 73, 4, -72 }, // 0x79 'y' - { 32327, 64, 73, 87, 10, -72 }, // 0x7A 'z' - { 32911, 20, 67, 24, 2, -51 }, // 0x7B '{' - { 33079, 5, 67, 18, 7, -50 }, // 0x7C '|' - { 33121, 20, 67, 24, 2, -51 }, // 0x7D '}' - { 33289, 35, 13, 41, 3, -30 } }; // 0x7E '~' - -static const GFXfont Quito36pt7b = { - (uint8_t *)Quito36pt7bBitmaps, - (GFXglyph *)Quito36pt7bGlyphs, - 0x20, 0x7E, 122 }; - -static const uint8_t Quito32pt7bBitmaps[] = { - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xF7, 0xEF, - 0xDF, 0xBF, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0x3E, 0x7C, 0x78, 0xF1, - 0xE3, 0xC7, 0x8F, 0x1E, 0x3C, 0x78, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x7E, - 0xFD, 0xFB, 0xF7, 0xE0, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, - 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, - 0xFC, 0x1F, 0x7C, 0x1F, 0x78, 0x1F, 0x78, 0x1E, 0x78, 0x1E, 0x78, 0x0E, - 0x00, 0x0F, 0x00, 0x3C, 0x00, 0x0F, 0x80, 0x1E, 0x00, 0x07, 0xC0, 0x1F, - 0x00, 0x03, 0xE0, 0x0F, 0x80, 0x01, 0xE0, 0x07, 0xC0, 0x01, 0xF0, 0x03, - 0xC0, 0x00, 0xF8, 0x01, 0xE0, 0x00, 0x7C, 0x01, 0xF0, 0x00, 0x3C, 0x00, - 0xF8, 0x00, 0x1E, 0x00, 0x7C, 0x00, 0x1F, 0x00, 0x3C, 0x00, 0x0F, 0x80, - 0x1E, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xC0, 0x3C, 0x00, 0xF8, 0x00, 0x1E, 0x00, 0x78, 0x00, 0x1F, - 0x00, 0x3C, 0x00, 0x0F, 0x80, 0x3E, 0x00, 0x07, 0xC0, 0x1F, 0x00, 0x03, - 0xC0, 0x0F, 0x80, 0x03, 0xE0, 0x07, 0x80, 0x01, 0xF0, 0x03, 0xC0, 0x00, - 0xF8, 0x03, 0xE0, 0x00, 0x78, 0x01, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0xE0, 0x07, 0x80, - 0x01, 0xF0, 0x07, 0xC0, 0x00, 0xF8, 0x03, 0xE0, 0x00, 0x78, 0x01, 0xF0, - 0x00, 0x3C, 0x00, 0xF0, 0x00, 0x3E, 0x00, 0x78, 0x00, 0x1F, 0x00, 0x7C, - 0x00, 0x0F, 0x80, 0x3E, 0x00, 0x07, 0x80, 0x1F, 0x00, 0x07, 0xC0, 0x0F, - 0x00, 0x03, 0xE0, 0x07, 0x80, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x00, - 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0x00, - 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x7F, 0xC7, 0xE0, 0x00, 0x00, - 0x00, 0xFF, 0x07, 0xE0, 0x00, 0x00, 0x01, 0xFE, 0x07, 0xE0, 0x00, 0x00, - 0x01, 0xFC, 0x07, 0xE0, 0x00, 0x00, 0x03, 0xF8, 0x07, 0xE0, 0x00, 0x00, - 0x07, 0xF0, 0x07, 0xE0, 0x00, 0x00, 0x07, 0xE0, 0x07, 0xE0, 0x00, 0x00, - 0x0F, 0xC0, 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xC0, 0x07, 0xE0, 0x00, 0x00, - 0x0F, 0x80, 0x07, 0xE0, 0x00, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x00, 0x00, - 0x1F, 0x80, 0x07, 0xE0, 0x00, 0x00, 0x1F, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x1F, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x1F, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x1F, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x1F, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x1F, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x1F, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x1F, 0x00, 0x07, 0xE0, 0xFC, 0x00, 0x1F, 0x80, 0x07, 0xE7, 0xFF, 0x80, - 0x1F, 0x80, 0x07, 0xFF, 0xFF, 0xE0, 0x0F, 0x80, 0x07, 0xFF, 0xFF, 0xF0, - 0x0F, 0xC0, 0x07, 0xFF, 0xFF, 0xF8, 0x0F, 0xC0, 0x07, 0xFF, 0xFF, 0xFC, - 0x07, 0xE0, 0x07, 0xFF, 0x03, 0xFC, 0x07, 0xF0, 0x07, 0xFC, 0x00, 0xFE, - 0x03, 0xF8, 0x07, 0xF8, 0x00, 0x7E, 0x01, 0xFC, 0x07, 0xF0, 0x00, 0x3F, - 0x01, 0xFE, 0x07, 0xF0, 0x00, 0x3F, 0x00, 0xFF, 0x07, 0xE0, 0x00, 0x3F, - 0x00, 0x7F, 0xC7, 0xE0, 0x00, 0x1F, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x1F, - 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0x1F, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x3F, - 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x3F, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x3E, - 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x7E, 0x00, 0x00, 0x07, 0xFC, 0x00, 0xFE, - 0x00, 0x00, 0x07, 0xFE, 0x01, 0xFC, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xF8, - 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xF0, 0x10, 0x00, 0x07, 0xFF, 0xFF, 0xE0, - 0x78, 0x00, 0x07, 0xEF, 0xFF, 0xC0, 0xFC, 0x00, 0x07, 0xE7, 0xFF, 0x80, - 0xFC, 0x00, 0x07, 0xE0, 0x7F, 0x00, 0x7E, 0x00, 0x07, 0xE0, 0x7F, 0x00, - 0x7F, 0x00, 0x07, 0xE0, 0xFE, 0x00, 0x3F, 0x80, 0x07, 0xE1, 0xFC, 0x00, - 0x1F, 0xC0, 0x07, 0xE3, 0xFC, 0x00, 0x0F, 0xF0, 0x07, 0xEF, 0xF8, 0x00, - 0x07, 0xFC, 0x07, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xC7, 0xFF, 0xE0, 0x00, - 0x01, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, - 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x00, - 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, - 0x03, 0xF0, 0x00, 0x00, 0x3C, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x7C, 0x00, - 0x1F, 0xFF, 0x00, 0x00, 0x78, 0x00, 0x3F, 0xFF, 0x80, 0x00, 0xF8, 0x00, - 0x7E, 0x1F, 0x80, 0x00, 0xF0, 0x00, 0x7C, 0x07, 0xC0, 0x01, 0xF0, 0x00, - 0xF8, 0x07, 0xC0, 0x01, 0xE0, 0x00, 0xF8, 0x03, 0xC0, 0x03, 0xE0, 0x00, - 0xF8, 0x03, 0xE0, 0x03, 0xC0, 0x00, 0xF8, 0x03, 0xE0, 0x07, 0xC0, 0x00, - 0xF8, 0x03, 0xE0, 0x0F, 0x80, 0x00, 0xF0, 0x03, 0xE0, 0x0F, 0x00, 0x00, - 0xF0, 0x03, 0xE0, 0x1F, 0x00, 0x00, 0xF8, 0x03, 0xE0, 0x1E, 0x00, 0x00, - 0xF8, 0x03, 0xE0, 0x3E, 0x00, 0x00, 0xF8, 0x03, 0xE0, 0x3C, 0x00, 0x00, - 0xF8, 0x03, 0xC0, 0x7C, 0x00, 0x00, 0xF8, 0x07, 0xC0, 0x78, 0x00, 0x00, - 0x7C, 0x07, 0xC0, 0xF8, 0x00, 0x00, 0x7E, 0x1F, 0x80, 0xF0, 0x00, 0x00, - 0x3F, 0xFF, 0x01, 0xF0, 0x00, 0x00, 0x1F, 0xFF, 0x01, 0xE0, 0x00, 0x00, - 0x0F, 0xFC, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xF0, 0x03, 0xC0, 0x1F, 0x80, - 0x00, 0x00, 0x07, 0xC0, 0x7F, 0xF0, 0x00, 0x00, 0x07, 0x80, 0xFF, 0xF8, - 0x00, 0x00, 0x0F, 0x81, 0xFF, 0xFC, 0x00, 0x00, 0x0F, 0x01, 0xF0, 0xFC, - 0x00, 0x00, 0x1F, 0x03, 0xE0, 0x3E, 0x00, 0x00, 0x3E, 0x03, 0xE0, 0x3E, - 0x00, 0x00, 0x3E, 0x07, 0xC0, 0x1F, 0x00, 0x00, 0x7C, 0x07, 0xC0, 0x1F, - 0x00, 0x00, 0x7C, 0x07, 0xC0, 0x1F, 0x00, 0x00, 0xF8, 0x07, 0xC0, 0x1F, - 0x00, 0x00, 0xF0, 0x07, 0xC0, 0x1F, 0x00, 0x01, 0xF0, 0x07, 0xC0, 0x1F, - 0x00, 0x01, 0xE0, 0x07, 0xC0, 0x1F, 0x00, 0x03, 0xE0, 0x07, 0xC0, 0x1F, - 0x00, 0x03, 0xC0, 0x07, 0xC0, 0x1F, 0x00, 0x07, 0xC0, 0x07, 0xC0, 0x1F, - 0x00, 0x07, 0x80, 0x03, 0xE0, 0x3E, 0x00, 0x0F, 0x80, 0x03, 0xE0, 0x3E, - 0x00, 0x0F, 0x00, 0x03, 0xF0, 0xFC, 0x00, 0x1F, 0x00, 0x01, 0xFF, 0xFC, - 0x00, 0x1E, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x3E, 0x00, 0x00, 0x7F, 0xF0, - 0x00, 0x3C, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, - 0x7F, 0xF0, 0x00, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xFF, 0xE0, - 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x07, 0xF0, 0x7F, 0x00, 0x00, 0x3F, - 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x01, 0xF8, 0x00, 0x07, 0xE0, 0x07, 0xE0, - 0x00, 0x1F, 0x80, 0x1F, 0x80, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x01, 0xF8, - 0x01, 0xF8, 0x00, 0x03, 0xF0, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x3F, 0x00, - 0x00, 0x3F, 0x80, 0xFC, 0x00, 0x00, 0x7F, 0x0F, 0xE0, 0x00, 0x00, 0xFE, - 0x7F, 0x00, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, - 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x03, 0xFF, - 0x80, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0xFE, 0x00, 0x00, - 0x0F, 0xF3, 0xF8, 0x00, 0x00, 0x7F, 0x87, 0xF0, 0x1C, 0x03, 0xF8, 0x0F, - 0xE0, 0xFC, 0x1F, 0xC0, 0x3F, 0xC3, 0xF0, 0x7E, 0x00, 0x7F, 0x8F, 0xC3, - 0xF8, 0x00, 0xFE, 0x7E, 0x0F, 0xC0, 0x01, 0xFD, 0xF8, 0x3F, 0x00, 0x03, - 0xFF, 0xE0, 0xFC, 0x00, 0x0F, 0xFF, 0x03, 0xF0, 0x00, 0x1F, 0xFC, 0x0F, - 0xC0, 0x00, 0x3F, 0xE0, 0x3F, 0x00, 0x00, 0x7F, 0x80, 0xFC, 0x00, 0x01, - 0xFE, 0x03, 0xF8, 0x00, 0x07, 0xFC, 0x07, 0xE0, 0x00, 0x3F, 0xF8, 0x1F, - 0xC0, 0x01, 0xFF, 0xF0, 0x3F, 0x80, 0x1F, 0xFF, 0xE0, 0xFF, 0x81, 0xFF, - 0x3F, 0xC1, 0xFF, 0xFF, 0xF8, 0x7F, 0xC3, 0xFF, 0xFF, 0xC0, 0xFE, 0x07, - 0xFF, 0xFC, 0x01, 0xF0, 0x07, 0xFF, 0xE0, 0x03, 0x80, 0x03, 0xFC, 0x00, - 0x04, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x79, - 0xE7, 0x9E, 0x00, 0x3C, 0x00, 0x78, 0x01, 0xE0, 0x07, 0xC0, 0x0F, 0x00, - 0x3E, 0x00, 0xF8, 0x01, 0xE0, 0x07, 0xC0, 0x0F, 0x80, 0x3E, 0x00, 0x7C, - 0x01, 0xF0, 0x03, 0xE0, 0x0F, 0xC0, 0x1F, 0x00, 0x3E, 0x00, 0xFC, 0x01, - 0xF8, 0x03, 0xE0, 0x07, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xFC, - 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, - 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, 0xC0, 0x0F, - 0x80, 0x1F, 0x00, 0x3F, 0x00, 0x7E, 0x00, 0x7C, 0x00, 0xF8, 0x01, 0xF8, - 0x01, 0xF0, 0x03, 0xE0, 0x03, 0xE0, 0x07, 0xC0, 0x07, 0xC0, 0x0F, 0x80, - 0x0F, 0x80, 0x1F, 0x00, 0x1F, 0x00, 0x3E, 0x00, 0x3E, 0x00, 0x3C, 0x00, - 0x3C, 0x00, 0x78, 0xF0, 0x00, 0xF0, 0x01, 0xF0, 0x01, 0xE0, 0x03, 0xE0, - 0x03, 0xE0, 0x07, 0xC0, 0x07, 0xC0, 0x0F, 0x80, 0x0F, 0x80, 0x1F, 0x00, - 0x1F, 0x00, 0x3E, 0x00, 0x7E, 0x00, 0x7C, 0x00, 0xF8, 0x01, 0xF8, 0x01, - 0xF0, 0x03, 0xE0, 0x07, 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x1F, 0x00, 0x3E, - 0x00, 0x7C, 0x00, 0xFC, 0x01, 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, 0xC0, - 0x1F, 0x80, 0x3F, 0x00, 0x7E, 0x00, 0xF8, 0x01, 0xF0, 0x03, 0xE0, 0x0F, - 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7C, 0x00, 0xF8, 0x03, 0xF0, 0x07, 0xC0, - 0x0F, 0x80, 0x3F, 0x00, 0x7C, 0x00, 0xF8, 0x03, 0xE0, 0x07, 0xC0, 0x1F, - 0x00, 0x3E, 0x00, 0xF8, 0x01, 0xF0, 0x07, 0xC0, 0x0F, 0x00, 0x3E, 0x00, - 0x78, 0x01, 0xE0, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0xF0, 0x00, - 0x0F, 0x00, 0x00, 0xF0, 0x07, 0x0F, 0x06, 0x7C, 0xF3, 0xEF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xF3, 0xFF, 0xFE, 0x03, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xFC, - 0x00, 0x79, 0xE0, 0x0F, 0x9F, 0x01, 0xF0, 0xF8, 0x3F, 0x0F, 0xC0, 0xE0, - 0x70, 0x04, 0x02, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x7C, 0x00, 0x00, - 0x03, 0xE0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x07, - 0xC0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x0F, 0x80, - 0x00, 0x00, 0x7C, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x1F, 0x00, 0x0F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x7C, 0x00, 0x00, 0x03, 0xE0, - 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x07, 0xC0, 0x00, - 0x00, 0x3E, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, - 0x7C, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0xF8, - 0x00, 0x00, 0x7E, 0xFD, 0xFB, 0xF7, 0xEF, 0xC3, 0x87, 0x1E, 0x3C, 0x71, - 0xE7, 0x8E, 0x18, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x07, 0x80, 0x01, - 0xE0, 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x0F, 0x00, 0x07, 0xC0, 0x01, 0xF0, - 0x00, 0x78, 0x00, 0x1E, 0x00, 0x0F, 0x80, 0x03, 0xC0, 0x00, 0xF0, 0x00, - 0x7C, 0x00, 0x1F, 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0xF8, 0x00, 0x3C, - 0x00, 0x0F, 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00, 0x78, 0x00, 0x1E, 0x00, - 0x0F, 0x80, 0x03, 0xC0, 0x00, 0xF0, 0x00, 0x7C, 0x00, 0x1F, 0x00, 0x07, - 0x80, 0x03, 0xE0, 0x00, 0xF8, 0x00, 0x3C, 0x00, 0x0F, 0x00, 0x07, 0xC0, - 0x01, 0xF0, 0x00, 0x78, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x03, 0xC0, 0x00, - 0xF0, 0x00, 0x7C, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x03, 0xE0, 0x00, 0xF8, - 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, - 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xF0, 0x07, 0xF8, 0x3F, 0xC0, - 0x7F, 0x00, 0x7F, 0x07, 0xF0, 0x01, 0xF8, 0x3F, 0x00, 0x07, 0xE3, 0xF0, - 0x00, 0x3F, 0x1F, 0x80, 0x00, 0xF8, 0xFC, 0x00, 0x07, 0xE7, 0xC0, 0x00, - 0x3F, 0x7E, 0x00, 0x00, 0xFB, 0xF0, 0x00, 0x07, 0xDF, 0x80, 0x00, 0x3F, - 0xFC, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x7F, 0xF0, - 0x00, 0x03, 0xFF, 0x80, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0xFF, 0xE0, 0x00, - 0x07, 0xFF, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x0F, - 0xFE, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x1F, 0xFE, - 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x3E, 0xFC, 0x00, - 0x01, 0xF3, 0xE0, 0x00, 0x1F, 0x9F, 0x80, 0x00, 0xFC, 0xFC, 0x00, 0x07, - 0xC7, 0xE0, 0x00, 0x7E, 0x1F, 0x80, 0x03, 0xF0, 0xFE, 0x00, 0x3F, 0x03, - 0xF8, 0x03, 0xF8, 0x1F, 0xF0, 0x7F, 0x80, 0x7F, 0xFF, 0xF8, 0x01, 0xFF, - 0xFF, 0x80, 0x07, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x1F, 0xE0, - 0x00, 0x00, 0x00, 0x07, 0x00, 0x0F, 0x00, 0x1F, 0x00, 0x3F, 0x00, 0x3F, - 0x00, 0xFF, 0x01, 0xFF, 0x03, 0xFF, 0x07, 0xFF, 0x1F, 0xFF, 0x7F, 0xDF, - 0xFF, 0x9F, 0xFF, 0x1F, 0xFC, 0x1F, 0xF0, 0x1F, 0xC0, 0x1F, 0x00, 0x1F, - 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, - 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, - 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, - 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, - 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, - 0xF0, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, - 0xF0, 0x0F, 0xFF, 0xFF, 0xE0, 0x7F, 0xC0, 0x7F, 0xC1, 0xFC, 0x00, 0x7F, - 0x0F, 0xE0, 0x00, 0xFE, 0x3F, 0x00, 0x01, 0xF8, 0xFC, 0x00, 0x07, 0xE7, - 0xE0, 0x00, 0x0F, 0xDF, 0x80, 0x00, 0x3F, 0x7E, 0x00, 0x00, 0xFC, 0x38, - 0x00, 0x03, 0xF0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x7E, 0x00, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF8, - 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x0F, 0xF0, 0x00, - 0x00, 0x7F, 0x80, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x01, - 0xFF, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x03, 0xFC, - 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x07, 0xF8, 0x00, - 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, - 0x1F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0xFF, - 0xFF, 0x00, 0x1F, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xF0, 0x0F, 0xF0, 0x3F, - 0xC0, 0xFE, 0x00, 0x7F, 0x07, 0xE0, 0x01, 0xF8, 0x7E, 0x00, 0x0F, 0xC3, - 0xF0, 0x00, 0x3F, 0x1F, 0x00, 0x01, 0xF9, 0xF8, 0x00, 0x0F, 0xC1, 0xC0, - 0x00, 0x7E, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x01, - 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0xC0, - 0x00, 0x3F, 0xFC, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0x00, 0x00, - 0x7F, 0xFE, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, - 0x7F, 0x80, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x1F, - 0x80, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x3F, 0x38, - 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x7F, 0xF8, 0x00, - 0x03, 0xFF, 0xE0, 0x00, 0x3F, 0x3F, 0x00, 0x03, 0xF9, 0xFC, 0x00, 0x3F, - 0xC7, 0xF0, 0x03, 0xFC, 0x3F, 0xE0, 0x7F, 0xC0, 0xFF, 0xFF, 0xFC, 0x03, - 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x1F, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, - 0x00, 0xFE, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, - 0x1F, 0xF0, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x03, - 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x3F, 0x7E, 0x00, 0x00, 0x7C, - 0xFC, 0x00, 0x01, 0xF1, 0xF8, 0x00, 0x07, 0xE3, 0xF0, 0x00, 0x1F, 0x87, - 0xE0, 0x00, 0x3E, 0x0F, 0xC0, 0x00, 0xF8, 0x1F, 0x80, 0x03, 0xE0, 0x3F, - 0x00, 0x0F, 0xC0, 0x7E, 0x00, 0x3F, 0x00, 0xFC, 0x00, 0x7C, 0x01, 0xF8, - 0x01, 0xF0, 0x03, 0xF0, 0x07, 0xE0, 0x07, 0xE0, 0x1F, 0x80, 0x0F, 0xC0, - 0x3E, 0x00, 0x1F, 0x80, 0xF8, 0x00, 0x3F, 0x03, 0xF0, 0x00, 0x7E, 0x07, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, - 0x00, 0x3F, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x0F, 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, - 0x7E, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, - 0xFE, 0x03, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xFF, - 0x80, 0xF8, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, - 0x7E, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x1F, - 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x03, 0xF0, 0xFE, 0x00, 0x0F, 0x9F, - 0xFF, 0x00, 0x3E, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, - 0xFC, 0x1F, 0xF8, 0x1F, 0xF8, 0x7F, 0x80, 0x1F, 0xE1, 0xFC, 0x00, 0x1F, - 0xC7, 0xE0, 0x00, 0x3F, 0x07, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x01, 0xF8, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3E, 0x00, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x0F, 0x80, 0x00, - 0x00, 0x7E, 0xFC, 0x00, 0x01, 0xFB, 0xF0, 0x00, 0x07, 0xEF, 0xC0, 0x00, - 0x1F, 0xBF, 0x00, 0x00, 0xFC, 0x7E, 0x00, 0x07, 0xF1, 0xFC, 0x00, 0x3F, - 0x83, 0xF8, 0x01, 0xFE, 0x0F, 0xF8, 0x1F, 0xF0, 0x1F, 0xFF, 0xFF, 0x80, - 0x3F, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xE0, 0x00, 0x7F, 0xFE, 0x00, 0x00, - 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, - 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xF0, 0x03, 0xFF, - 0xFF, 0xC0, 0x1F, 0xE0, 0x7F, 0x80, 0xFE, 0x00, 0x7F, 0x03, 0xF0, 0x00, - 0xFC, 0x1F, 0x80, 0x01, 0xF8, 0x7E, 0x00, 0x07, 0xE3, 0xF0, 0x00, 0x1F, - 0x8F, 0xC0, 0x00, 0x3E, 0x3E, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x7C, 0x07, 0xF0, 0x01, 0xF0, - 0x7F, 0xF8, 0x07, 0xC7, 0xFF, 0xF0, 0x1F, 0x3F, 0xFF, 0xF0, 0xFD, 0xFF, - 0xFF, 0xE3, 0xFF, 0xE0, 0x7F, 0x8F, 0xFE, 0x00, 0x7F, 0x3F, 0xE0, 0x00, - 0xFE, 0xFF, 0x80, 0x01, 0xFB, 0xFC, 0x00, 0x07, 0xEF, 0xE0, 0x00, 0x0F, - 0xFF, 0x80, 0x00, 0x3F, 0x7E, 0x00, 0x00, 0xFD, 0xF8, 0x00, 0x03, 0xF7, - 0xE0, 0x00, 0x0F, 0xDF, 0x80, 0x00, 0x3F, 0x7E, 0x00, 0x00, 0xFD, 0xF8, - 0x00, 0x03, 0xF3, 0xE0, 0x00, 0x0F, 0xCF, 0xC0, 0x00, 0x3E, 0x3F, 0x00, - 0x01, 0xF8, 0x7E, 0x00, 0x07, 0xE1, 0xFC, 0x00, 0x3F, 0x03, 0xF8, 0x01, - 0xFC, 0x0F, 0xF8, 0x1F, 0xE0, 0x1F, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xF8, - 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x3F, 0xC0, 0x00, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, - 0x0F, 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x07, 0xE0, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x01, - 0xF8, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xC0, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x3F, 0x00, 0x00, - 0x03, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x01, 0xF8, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x1F, - 0x80, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x3E, 0x00, - 0x00, 0x01, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3F, 0xC0, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0x80, 0x0F, - 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xF8, 0x0F, 0xF0, 0x3F, 0xE0, 0xFF, 0x00, - 0x7F, 0x07, 0xF0, 0x01, 0xFC, 0x3F, 0x00, 0x07, 0xE3, 0xF0, 0x00, 0x3F, - 0x1F, 0x80, 0x00, 0xF8, 0xFC, 0x00, 0x07, 0xC7, 0xE0, 0x00, 0x3E, 0x1F, - 0x00, 0x03, 0xF0, 0xFC, 0x00, 0x1F, 0x87, 0xE0, 0x01, 0xFC, 0x1F, 0xC0, - 0x1F, 0xC0, 0x7F, 0x03, 0xFC, 0x01, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFC, - 0x00, 0x0F, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xFE, 0x03, - 0xFC, 0x0F, 0xF8, 0x3F, 0x80, 0x0F, 0xE3, 0xF8, 0x00, 0x3F, 0x9F, 0x80, - 0x00, 0xFD, 0xF8, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x1F, 0xFE, 0x00, 0x00, - 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0xFF, - 0xC0, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x03, 0xFF, 0xC0, - 0x00, 0x1F, 0xBF, 0x00, 0x01, 0xF9, 0xFC, 0x00, 0x1F, 0xC7, 0xF0, 0x01, - 0xFC, 0x3F, 0xE0, 0x3F, 0xE0, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xE0, - 0x0F, 0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0xC0, 0x00, 0x1F, 0xF0, 0x00, 0x00, - 0x3F, 0xC0, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, - 0xFC, 0x01, 0xFF, 0xFF, 0xF0, 0x0F, 0xF8, 0x3F, 0xC0, 0xFF, 0x00, 0x7F, - 0x0F, 0xE0, 0x01, 0xFC, 0x7F, 0x00, 0x07, 0xE7, 0xF0, 0x00, 0x1F, 0xBF, - 0x00, 0x00, 0xFD, 0xF8, 0x00, 0x03, 0xEF, 0xC0, 0x00, 0x1F, 0x7C, 0x00, - 0x00, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x01, - 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x07, 0xFF, - 0xC0, 0x00, 0x3F, 0xBF, 0x00, 0x03, 0xFD, 0xFC, 0x00, 0x3F, 0xE7, 0xF0, - 0x03, 0xFF, 0x3F, 0xE0, 0x7E, 0xF8, 0xFF, 0xFF, 0xF7, 0xC3, 0xFF, 0xFF, - 0x3E, 0x0F, 0xFF, 0xF1, 0xF0, 0x1F, 0xFE, 0x0F, 0x80, 0x3F, 0xC0, 0xFC, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0xF0, 0x00, - 0x00, 0x1F, 0x9F, 0x00, 0x00, 0xFC, 0xF8, 0x00, 0x07, 0xC7, 0xC0, 0x00, - 0x7E, 0x3F, 0x00, 0x07, 0xF0, 0xFC, 0x00, 0x3F, 0x07, 0xF0, 0x07, 0xF0, - 0x1F, 0xC0, 0xFF, 0x80, 0xFF, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0x80, 0x0F, - 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFC, 0x7E, - 0xFD, 0xFB, 0xF7, 0xEF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF7, - 0xEF, 0xDF, 0xBF, 0x7E, 0x1C, 0x38, 0xF1, 0xE3, 0x8F, 0x7C, 0x70, 0xC0, - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x07, 0xC0, - 0x00, 0x00, 0xFF, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0xFF, 0xF0, 0x00, - 0x1F, 0xFF, 0x80, 0x01, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0x00, 0x03, 0xFF, - 0xF0, 0x00, 0x3F, 0xFE, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x3F, 0xFC, 0x00, - 0x03, 0xFF, 0xC0, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, - 0xFF, 0x80, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x03, - 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x01, - 0xFF, 0xF0, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x00, - 0xFF, 0xF0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, - 0x7C, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xC0, 0x00, 0x00, 0x03, 0xC0, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0xFF, 0xE0, 0x00, - 0x03, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xF0, 0x00, - 0x01, 0xFF, 0xF0, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0xFF, 0xF8, 0x00, - 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x00, - 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, - 0x7F, 0xF0, 0x00, 0x07, 0xFF, 0x80, 0x00, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, - 0x80, 0x01, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0x00, 0x03, 0xFF, 0xF0, 0x00, - 0x3F, 0xFE, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x3F, - 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x0C, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x0F, 0xFF, 0xE0, 0x01, 0xFF, - 0xFF, 0x80, 0x1F, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFC, 0x1F, 0xF0, 0x3F, - 0xF0, 0xFE, 0x00, 0x7F, 0x8F, 0xE0, 0x00, 0xFE, 0x7E, 0x00, 0x03, 0xF7, - 0xF0, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x03, 0xFF, 0xC0, - 0x00, 0x1F, 0x8E, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x3E, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF8, - 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x3F, 0xC0, 0x00, - 0x03, 0xFC, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x07, 0xE0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, - 0x1F, 0x80, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x00, - 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, - 0xFF, 0xE0, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x07, - 0xFF, 0xE0, 0x03, 0xFF, 0xE0, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x07, 0xFE, - 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x1F, 0xF0, 0x00, - 0x00, 0x01, 0xFE, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, - 0xFE, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x3F, 0x80, 0x07, 0xE0, 0x00, - 0x0F, 0xC0, 0x0F, 0xE0, 0x03, 0xFF, 0x07, 0xE0, 0xFC, 0x01, 0xF8, 0x01, - 0xFF, 0xF8, 0xFC, 0x1F, 0x80, 0x7E, 0x00, 0x7F, 0xFF, 0x9F, 0x01, 0xF8, - 0x0F, 0x80, 0x3F, 0xFF, 0xFB, 0xE0, 0x1F, 0x03, 0xF0, 0x07, 0xFF, 0xFF, - 0xFC, 0x03, 0xE0, 0x7C, 0x01, 0xFF, 0x07, 0xFF, 0x80, 0x7E, 0x0F, 0x80, - 0x7F, 0x80, 0x3F, 0xF0, 0x07, 0xC3, 0xE0, 0x1F, 0xE0, 0x03, 0xFC, 0x00, - 0xF8, 0x7C, 0x03, 0xF8, 0x00, 0x3F, 0x80, 0x1F, 0x0F, 0x00, 0xFE, 0x00, - 0x07, 0xF0, 0x03, 0xE3, 0xE0, 0x1F, 0x80, 0x00, 0xFE, 0x00, 0x3C, 0x7C, - 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x07, 0x8F, 0x80, 0xFC, 0x00, 0x01, 0xF0, - 0x00, 0xF1, 0xE0, 0x1F, 0x80, 0x00, 0x3E, 0x00, 0x3E, 0x3C, 0x03, 0xF0, - 0x00, 0x07, 0xC0, 0x07, 0xC7, 0x80, 0xFC, 0x00, 0x01, 0xF8, 0x00, 0xF9, - 0xF0, 0x1F, 0x80, 0x00, 0x3E, 0x00, 0x1F, 0x3E, 0x03, 0xF0, 0x00, 0x07, - 0xC0, 0x03, 0xC7, 0xC0, 0x7E, 0x00, 0x00, 0xF8, 0x00, 0xF8, 0xF8, 0x0F, - 0xC0, 0x00, 0x3F, 0x00, 0x1F, 0x1F, 0x01, 0xF8, 0x00, 0x07, 0xE0, 0x07, - 0xC1, 0xE0, 0x3F, 0x00, 0x01, 0xF8, 0x00, 0xF8, 0x3C, 0x07, 0xE0, 0x00, - 0x7F, 0x00, 0x3E, 0x07, 0xC0, 0x7E, 0x00, 0x1F, 0xE0, 0x0F, 0x80, 0xF8, - 0x0F, 0xC0, 0x07, 0xFC, 0x03, 0xF0, 0x1F, 0x01, 0xFC, 0x01, 0xFF, 0x80, - 0xFC, 0x03, 0xE0, 0x1F, 0xE0, 0xFF, 0xF0, 0x3F, 0x00, 0x3E, 0x03, 0xFF, - 0xFF, 0xFE, 0x1F, 0xC0, 0x07, 0xC0, 0x3F, 0xFF, 0xEF, 0xFF, 0xF0, 0x00, - 0xFC, 0x03, 0xFF, 0xF9, 0xFF, 0xFC, 0x00, 0x0F, 0xC0, 0x3F, 0xFE, 0x3F, - 0xFF, 0x00, 0x01, 0xF8, 0x03, 0xFF, 0x03, 0xFF, 0x80, 0x00, 0x1F, 0x80, - 0x1F, 0x80, 0x1F, 0x80, 0x0F, 0x83, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xF0, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x03, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x03, - 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x0F, - 0xFC, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x3F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, - 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, - 0xFC, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x00, 0x00, - 0x00, 0x00, 0x7E, 0x7E, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x3F, 0x00, 0x00, - 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x80, 0x00, - 0x00, 0x01, 0xFC, 0x1F, 0x80, 0x00, 0x00, 0x01, 0xF8, 0x1F, 0x80, 0x00, - 0x00, 0x01, 0xF8, 0x0F, 0xC0, 0x00, 0x00, 0x03, 0xF0, 0x0F, 0xC0, 0x00, - 0x00, 0x03, 0xF0, 0x0F, 0xC0, 0x00, 0x00, 0x03, 0xF0, 0x07, 0xE0, 0x00, - 0x00, 0x07, 0xE0, 0x07, 0xE0, 0x00, 0x00, 0x07, 0xE0, 0x07, 0xE0, 0x00, - 0x00, 0x07, 0xE0, 0x03, 0xF0, 0x00, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, - 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0x00, 0x0F, 0xC0, 0x01, 0xF8, 0x00, - 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, - 0x00, 0x3F, 0x80, 0x00, 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x3F, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0x7F, 0xFF, 0x00, 0x7E, 0x00, 0x00, 0x7F, 0xFF, 0xE0, 0x3F, 0x00, - 0x00, 0xFF, 0xFF, 0xF0, 0x3F, 0x00, 0x00, 0xFF, 0xFF, 0xF8, 0x3F, 0x00, - 0x00, 0xFF, 0xFF, 0xFC, 0x1F, 0x80, 0x01, 0xFF, 0xFF, 0xFE, 0x1F, 0x80, - 0x01, 0xFF, 0x01, 0xFF, 0x1F, 0x80, 0x01, 0xFE, 0x00, 0x7F, 0x0F, 0xC0, - 0x03, 0xF8, 0x00, 0x3F, 0x8F, 0xC0, 0x03, 0xF8, 0x00, 0x1F, 0x8F, 0xC0, - 0x03, 0xF0, 0x00, 0x1F, 0x87, 0xE0, 0x07, 0xF0, 0x00, 0x0F, 0xC7, 0xE0, - 0x07, 0xF0, 0x00, 0x0F, 0xC7, 0xE0, 0x07, 0xE0, 0x00, 0x0F, 0xC3, 0xF0, - 0x0F, 0xE0, 0x00, 0x0F, 0xC3, 0xF0, 0x0F, 0xF0, 0x00, 0x0F, 0x83, 0xF0, - 0x1F, 0xF0, 0x00, 0x0F, 0x81, 0xF8, 0x1F, 0xF0, 0x00, 0x1F, 0x81, 0xF8, - 0x1F, 0xF8, 0x00, 0x1F, 0x80, 0xF8, 0x3F, 0xF8, 0x00, 0x3F, 0x00, 0xFC, - 0x3F, 0xFC, 0x00, 0x7F, 0x00, 0xFC, 0x3F, 0xFF, 0x01, 0xFE, 0x00, 0x7E, - 0x7E, 0x7F, 0xFF, 0xFE, 0x00, 0x7E, 0x7E, 0x7F, 0xFF, 0xFC, 0x00, 0x7E, - 0x7E, 0x1F, 0xFF, 0xF8, 0x00, 0x3F, 0x7C, 0x0F, 0xFF, 0xE0, 0x00, 0x3F, - 0x7C, 0x07, 0xFF, 0xC0, 0x00, 0x3E, 0x38, 0x00, 0xFE, 0x00, 0x00, 0x0C, - 0x20, 0x00, 0x18, 0x00, 0x00, 0x01, 0xF0, 0x07, 0xFF, 0x80, 0x00, 0x03, - 0xE0, 0x7F, 0xFF, 0xE0, 0x00, 0x07, 0xC3, 0xFF, 0xFF, 0xF0, 0x00, 0x0F, - 0x8F, 0xFF, 0xFF, 0xF0, 0x00, 0x1F, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0x3E, - 0xFF, 0xE0, 0x3F, 0xF8, 0x00, 0x7F, 0xFE, 0x00, 0x0F, 0xF0, 0x00, 0xFF, - 0xF0, 0x00, 0x0F, 0xF0, 0x01, 0xFF, 0xC0, 0x00, 0x07, 0xF0, 0x03, 0xFF, - 0x00, 0x00, 0x07, 0xF0, 0x07, 0xFC, 0x00, 0x00, 0x07, 0xE0, 0x0F, 0xF0, - 0x00, 0x00, 0x0F, 0xE0, 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0xC0, 0x3F, 0x80, - 0x00, 0x00, 0x1F, 0x80, 0x7E, 0x00, 0x00, 0x00, 0x1F, 0x80, 0xFC, 0x00, - 0x00, 0x00, 0x3F, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x7E, 0x03, 0xF0, 0x00, - 0x00, 0x00, 0x7C, 0x07, 0xC0, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x80, 0x00, - 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x3E, 0x00, 0x00, - 0x00, 0x07, 0xC0, 0x7E, 0x00, 0x00, 0x00, 0x1F, 0x80, 0xFC, 0x00, 0x00, - 0x00, 0x3F, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x7E, 0x03, 0xF0, 0x00, 0x00, - 0x00, 0xFE, 0x07, 0xF0, 0x00, 0x00, 0x03, 0xFE, 0x0F, 0xE0, 0x00, 0x00, - 0x07, 0xFE, 0x1F, 0xE0, 0x00, 0x00, 0x1F, 0xFC, 0x3F, 0xE0, 0x00, 0x00, - 0x7F, 0xFC, 0x7F, 0xE0, 0x00, 0x01, 0xFD, 0xFC, 0xFF, 0xE0, 0x00, 0x07, - 0xFB, 0xF9, 0xFF, 0xE0, 0x00, 0x1F, 0xE3, 0xF3, 0xFF, 0xF0, 0x00, 0xFF, - 0x87, 0xF7, 0xFF, 0xFF, 0x3F, 0xFE, 0x07, 0xEF, 0xFF, 0xFF, 0xFF, 0xF8, - 0x0F, 0xDF, 0x9F, 0xFF, 0xFF, 0xE0, 0x1F, 0xBE, 0x1F, 0xFF, 0xFF, 0x00, - 0x3F, 0x7C, 0x0F, 0xFF, 0xFC, 0x00, 0x3F, 0xF8, 0x07, 0xFF, 0xC0, 0x00, - 0x7F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x01, - 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x0F, - 0xDF, 0x80, 0x00, 0x00, 0x00, 0x1F, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0x7E, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xFC, 0x00, 0x00, 0x00, 0x01, 0xFD, - 0xFC, 0x00, 0x00, 0x00, 0x03, 0xF3, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xE7, - 0xF8, 0x00, 0x00, 0x00, 0x1F, 0x8F, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0x1F, - 0xF8, 0x00, 0x00, 0x01, 0xFC, 0x3F, 0xF8, 0x00, 0x00, 0x07, 0xF8, 0x7F, - 0xF8, 0x00, 0x00, 0x1F, 0xE0, 0xFF, 0xF8, 0x00, 0x00, 0xFF, 0x81, 0xF7, - 0xFC, 0x00, 0x03, 0xFE, 0x03, 0xE7, 0xFE, 0x00, 0x3F, 0xF8, 0x07, 0xC7, - 0xFF, 0xFF, 0xFF, 0xE0, 0x0F, 0x87, 0xFF, 0xFF, 0xFF, 0x80, 0x1F, 0x03, - 0xFF, 0xFF, 0xFC, 0x00, 0x3E, 0x01, 0xFF, 0xFF, 0xF0, 0x00, 0x7C, 0x00, - 0xFF, 0xFF, 0x00, 0x00, 0x70, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xF8, - 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0xFF, - 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, - 0xFF, 0xFF, 0x1F, 0xF9, 0xFF, 0x80, 0x00, 0x7F, 0xF8, 0x0F, 0xF0, 0x0F, - 0xF0, 0x00, 0x3F, 0xF0, 0x03, 0xF8, 0x00, 0xFE, 0x00, 0x3F, 0xF0, 0x01, - 0xFC, 0x00, 0x1F, 0x80, 0x1F, 0xF0, 0x00, 0x7E, 0x00, 0x07, 0xE0, 0x0F, - 0xF8, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x03, 0xFC, 0x00, 0x0F, 0xC0, 0x00, - 0x3F, 0x01, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0xFE, 0x00, 0x00, - 0xFC, 0x00, 0x03, 0xF0, 0x7F, 0x80, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x1F, - 0xC0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x0F, 0xE0, 0x00, 0x01, 0xF0, 0x00, - 0x0F, 0xC3, 0xF0, 0x00, 0x00, 0x7E, 0x00, 0x07, 0xF1, 0xFC, 0x00, 0x00, - 0x1F, 0x80, 0x01, 0xF8, 0x7E, 0x00, 0x00, 0x03, 0xF0, 0x00, 0xFE, 0x3F, - 0x80, 0x00, 0x00, 0xFF, 0x00, 0x7F, 0x0F, 0xC0, 0x00, 0x00, 0x1F, 0xF0, - 0x7F, 0xC3, 0xF0, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xE0, 0xF8, 0x00, 0x00, - 0x00, 0x7F, 0xFF, 0xF0, 0x7E, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF8, 0x1F, - 0x80, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x1F, - 0xF8, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xF0, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x07, 0xF0, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x1F, - 0xE0, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x1F, - 0xE0, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x0F, 0xFC, 0x00, - 0x00, 0x1F, 0xF8, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x3F, 0xFC, 0x00, 0x00, - 0x1F, 0xFF, 0xC1, 0xFF, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, - 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x03, 0xFF, - 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFE, 0x00, 0x00, 0x03, - 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x1F, - 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, 0xFC, 0x1F, 0xFF, 0xE0, 0x00, 0x7E, - 0x00, 0x01, 0xFF, 0xE0, 0x00, 0xFC, 0x00, 0x00, 0x7F, 0xF0, 0x01, 0xF8, - 0x00, 0x00, 0x3F, 0xF0, 0x03, 0xF0, 0x00, 0x00, 0x1F, 0xF0, 0x07, 0xE0, - 0x00, 0x00, 0x1F, 0xF0, 0x0F, 0xC0, 0x00, 0x00, 0x1F, 0xE0, 0x1F, 0x80, - 0x00, 0x00, 0x1F, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x7E, 0x00, - 0x00, 0x00, 0x1F, 0xE0, 0xFC, 0x00, 0x00, 0x00, 0x1F, 0xC1, 0xF8, 0x00, - 0x00, 0x00, 0x1F, 0xC3, 0xF0, 0x00, 0x00, 0x00, 0x1F, 0x87, 0xE0, 0x00, - 0x00, 0x00, 0x3F, 0x8F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0x1F, 0x80, 0x00, - 0x00, 0x00, 0x7E, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x00, 0x00, - 0x00, 0x00, 0xFC, 0xFC, 0x00, 0x00, 0x00, 0x01, 0xF9, 0xF8, 0x00, 0x00, - 0x00, 0x01, 0xFB, 0xF0, 0x00, 0x00, 0x00, 0x03, 0xF7, 0xE0, 0x00, 0x00, - 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x00, 0x00, 0x0F, 0xDF, 0x80, 0x00, 0x00, - 0x00, 0x1F, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7E, 0x00, 0x00, 0x00, - 0x00, 0x3E, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xF7, 0xE0, 0x00, 0x00, 0x00, - 0x03, 0xEF, 0xC0, 0x00, 0x00, 0x00, 0x0F, 0xDF, 0x80, 0x00, 0x00, 0x00, - 0x1F, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x7E, 0x00, 0x00, 0x00, 0x00, - 0x7E, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xF8, 0x00, 0x00, 0x00, 0x03, - 0xF3, 0xF0, 0x00, 0x00, 0x00, 0x07, 0xE7, 0xE0, 0x00, 0x00, 0x00, 0x0F, - 0xCF, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x7E, - 0x3F, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x7E, 0x00, 0x00, 0x00, 0x07, 0xF0, - 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xC1, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0x83, - 0xF0, 0x00, 0x00, 0x00, 0xFE, 0x07, 0xE0, 0x00, 0x00, 0x03, 0xFC, 0x0F, - 0xC0, 0x00, 0x00, 0x0F, 0xF0, 0x1F, 0x80, 0x00, 0x00, 0x3F, 0xC0, 0x3F, - 0x00, 0x00, 0x00, 0xFF, 0x00, 0x7E, 0x00, 0x00, 0x07, 0xFC, 0x00, 0xFC, - 0x00, 0x00, 0x3F, 0xF0, 0x01, 0xF8, 0x00, 0x01, 0xFF, 0xC0, 0x03, 0xF8, - 0x00, 0x1F, 0xFF, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, - 0xFF, 0xFF, 0xE0, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x0F, 0xFF, - 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x7F, - 0xE0, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC3, 0xFE, 0x00, 0x00, - 0x00, 0x0F, 0x9F, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0x7F, 0xFF, 0x80, 0x00, - 0x00, 0x3F, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x00, - 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0x80, 0xFF, 0x80, 0x00, - 0x03, 0xFE, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x7F, 0x00, 0x00, - 0x0F, 0xE0, 0x00, 0x7E, 0x00, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7E, 0x00, 0x01, 0xF8, 0x00, 0x00, - 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x01, 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x03, - 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x07, 0xE0, 0x00, 0x1F, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x7E, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0xFC, 0x00, 0x00, 0x3F, - 0xC0, 0x03, 0xF8, 0x00, 0x00, 0x7F, 0xC0, 0x0F, 0xE0, 0x00, 0x00, 0xFF, - 0xC0, 0x7F, 0x80, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0xFF, - 0xFF, 0xFC, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x0F, 0xBF, - 0xFF, 0x80, 0x00, 0x00, 0x1F, 0x1F, 0xFE, 0x00, 0x00, 0x00, 0x3E, 0x07, - 0xE0, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, - 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC3, 0xFE, 0x00, 0x00, 0x00, 0x0F, - 0x9F, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x3F, - 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0xFF, - 0xF1, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0x80, 0x7F, 0x80, 0x00, 0x03, 0xFC, - 0x00, 0x7F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xC0, - 0x00, 0x7E, 0x00, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0xFC, 0x00, 0x00, 0x7C, 0x00, 0x01, 0xF8, 0x00, 0x00, 0xF8, 0x00, - 0x03, 0xF0, 0x00, 0x01, 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x03, 0xE0, 0x00, - 0x0F, 0xC0, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x00, 0x00, 0x0F, 0xC0, 0x00, - 0x7E, 0x00, 0x00, 0x1F, 0xC0, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0xC0, 0x03, - 0xF0, 0x00, 0x00, 0x7F, 0xC0, 0x1F, 0xE0, 0x00, 0x00, 0xFF, 0xE0, 0xFF, - 0x80, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFC, - 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x0F, 0xBF, 0xFF, 0x80, - 0x00, 0x00, 0x1F, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x3E, 0x03, 0x80, 0x00, - 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, - 0x00, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, - 0xF8, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x01, - 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, - 0x00, 0x00, 0xFF, 0xFF, 0x8F, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xF8, 0x00, - 0x0F, 0xFF, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x3F, - 0xF0, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x00, 0x7F, - 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x03, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0xE0, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7F, 0xF0, 0x00, - 0x00, 0x3F, 0x80, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x3F, - 0xFF, 0xF0, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x01, 0xF8, - 0x00, 0x0F, 0xFF, 0xFF, 0xC0, 0x00, 0x7E, 0x00, 0x07, 0xFC, 0x0F, 0xF0, - 0x00, 0x1F, 0x80, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x07, 0xE0, 0x00, 0xFE, - 0x00, 0x1F, 0xC0, 0x01, 0xF0, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0x7C, - 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x1F, 0x00, 0x07, 0xE0, 0x00, 0x1F, - 0x80, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x07, 0xE0, 0xFB, 0xF0, 0x00, 0x7E, - 0x00, 0x01, 0xFF, 0xFF, 0xFC, 0x00, 0x1F, 0x80, 0x00, 0x7F, 0xFF, 0xFF, - 0x00, 0x07, 0xE0, 0x00, 0x1F, 0xFF, 0xF7, 0xC0, 0x01, 0xF8, 0x00, 0x07, - 0xFF, 0xFD, 0xF0, 0x00, 0x3E, 0x00, 0x03, 0xFF, 0xFF, 0x7C, 0x00, 0x0F, - 0xC0, 0x00, 0xFC, 0x0F, 0xDF, 0x80, 0x03, 0xF0, 0x00, 0x7F, 0x03, 0xF7, - 0xE0, 0x00, 0x7E, 0x00, 0x3F, 0x80, 0xFD, 0xF8, 0x00, 0x1F, 0xE0, 0x1F, - 0xE0, 0x3F, 0x3E, 0x00, 0x03, 0xFF, 0x3F, 0xF0, 0x0F, 0xCF, 0xC0, 0x00, - 0x7F, 0xFF, 0xF8, 0x03, 0xF3, 0xF0, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0xFC, - 0x7E, 0x00, 0x01, 0xFF, 0xFE, 0x00, 0x3F, 0x1F, 0x80, 0x00, 0x3F, 0xFE, - 0x00, 0x0F, 0xC7, 0xF0, 0x00, 0x01, 0xFE, 0x00, 0x03, 0xF0, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xF0, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x07, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0x80, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x03, 0xFC, 0x00, 0x00, - 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x0F, - 0xFC, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x1F, 0xFC, - 0x00, 0x00, 0x1F, 0xFF, 0xC0, 0xFF, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0xFF, - 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, - 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xE0, 0x00, 0x00, 0x00, - 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x00, 0x00, - 0x07, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0x7F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x01, - 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x07, - 0xFF, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x7F, - 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x01, 0xFF, - 0xC0, 0x00, 0xFF, 0x00, 0x03, 0xFF, 0x80, 0x0F, 0xFF, 0xC0, 0x07, 0xFF, - 0x00, 0x3F, 0xFF, 0xC0, 0x0F, 0xFE, 0x00, 0xFF, 0xFF, 0xC0, 0x1F, 0xFC, - 0x03, 0xFF, 0xFF, 0xC0, 0x3F, 0xF8, 0x0F, 0xFF, 0xFF, 0xC0, 0x7F, 0xF0, - 0x3F, 0xC0, 0x3F, 0xC0, 0xFF, 0xE0, 0x7F, 0x00, 0x3F, 0x81, 0xFF, 0xC1, - 0xFC, 0x00, 0x3F, 0x83, 0xFF, 0x83, 0xF0, 0x00, 0x3F, 0x07, 0xFF, 0x0F, - 0xC0, 0x00, 0x3F, 0x0F, 0xFF, 0xFF, 0x80, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFC, - 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xF0, - 0x00, 0x0F, 0xFF, 0xFF, 0x83, 0xF0, 0x00, 0x3F, 0x87, 0xFF, 0x07, 0xE0, - 0x00, 0x7E, 0x0F, 0xFE, 0x07, 0xE0, 0x01, 0xFC, 0x1F, 0xFC, 0x0F, 0xE0, - 0x07, 0xF0, 0x3F, 0xF8, 0x0F, 0xF0, 0x3F, 0xE0, 0x7F, 0xF0, 0x1F, 0xFF, - 0xFF, 0x80, 0xFF, 0xE0, 0x1F, 0xFF, 0xFE, 0x01, 0xFF, 0xC0, 0x1F, 0xFF, - 0xF8, 0x03, 0xFF, 0x80, 0x0F, 0xFF, 0xE0, 0x07, 0xFF, 0x00, 0x07, 0xFF, - 0x00, 0x0F, 0xFE, 0x00, 0x01, 0xE0, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x00, - 0x03, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x03, - 0xFF, 0x80, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xFE, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3E, - 0x70, 0x00, 0x00, 0x00, 0x00, 0x38, 0x23, 0xEF, 0xBF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x70, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0x00, - 0x00, 0x03, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0xFF, 0xC0, - 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x03, 0xF8, 0x00, - 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x7E, - 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0x07, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x1F, 0x00, - 0x00, 0xFC, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x01, - 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x03, 0xF0, 0x00, 0xFE, 0x00, 0x00, - 0x00, 0x0F, 0xE0, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0xF0, 0x7F, 0xC0, - 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, - 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x01, - 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x0F, 0x80, 0x00, 0x00, - 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0xFE, 0x00, - 0x00, 0x00, 0x7F, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x07, - 0xF8, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0xFF, 0x00, - 0x00, 0x1F, 0xF0, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0xFF, - 0xC0, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0xFF, - 0xFF, 0xF0, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01, - 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x80, - 0x01, 0xF0, 0x00, 0x00, 0x3F, 0xF8, 0x03, 0xE0, 0x00, 0x01, 0xFF, 0xFC, - 0x07, 0xC0, 0x00, 0x07, 0xFF, 0xFC, 0x0F, 0x80, 0x00, 0x1F, 0xFF, 0xFE, - 0x1F, 0x00, 0x00, 0x7F, 0xFF, 0xFC, 0x3E, 0x00, 0x01, 0xFF, 0x87, 0xFC, - 0x7C, 0x00, 0x07, 0xF8, 0x03, 0xFC, 0xF8, 0x00, 0x0F, 0xE0, 0x03, 0xF9, - 0xF0, 0x00, 0x1F, 0x80, 0x03, 0xFB, 0xE0, 0x00, 0x7E, 0x00, 0x03, 0xF7, - 0xC0, 0x01, 0xFC, 0x00, 0x07, 0xEF, 0x80, 0x07, 0xF8, 0x00, 0x07, 0xDF, - 0x00, 0x1F, 0xE0, 0x00, 0x0F, 0xFE, 0x00, 0x7F, 0xC0, 0x00, 0x1F, 0xFC, - 0x01, 0xFF, 0xC0, 0x00, 0x3F, 0xF8, 0x07, 0xFF, 0x80, 0x00, 0x7D, 0xF0, - 0x3F, 0xFF, 0x00, 0x01, 0xFB, 0xE0, 0xFF, 0xFF, 0x00, 0x03, 0xF7, 0xC3, - 0xFE, 0x7E, 0x00, 0x0F, 0xEF, 0x8F, 0xFC, 0xFE, 0x00, 0x3F, 0x9F, 0x3F, - 0xFC, 0xFE, 0x00, 0xFF, 0x3E, 0xFF, 0xFD, 0xFF, 0x87, 0xFC, 0x7F, 0xFF, - 0xF9, 0xFF, 0xFF, 0xF0, 0xFF, 0xF3, 0xF9, 0xFF, 0xFF, 0xC1, 0xFF, 0xC3, - 0xF9, 0xFF, 0xFF, 0x03, 0xFF, 0x07, 0xF1, 0xFF, 0xFC, 0x07, 0xFC, 0x07, - 0xF0, 0x7F, 0xE0, 0x0F, 0xE0, 0x07, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x07, - 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x0F, - 0xE0, 0x00, 0x00, 0xF8, 0x00, 0x0F, 0xE0, 0x00, 0x01, 0xF0, 0x00, 0x1F, - 0xC0, 0x00, 0x03, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x07, 0xC0, 0x00, 0x1F, - 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0x00, 0x00, 0x3F, - 0x80, 0x00, 0x3E, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x7C, 0x00, 0x00, 0x3F, - 0x80, 0x00, 0xF8, 0x00, 0x00, 0x7F, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x7F, - 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x07, 0xC0, 0x00, 0x00, 0xFE, - 0x00, 0x0F, 0x80, 0x00, 0x00, 0xFE, 0x00, 0x1F, 0x00, 0x00, 0x00, 0xFE, - 0x00, 0x3E, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x7C, 0x00, 0x00, 0x01, 0xFC, - 0x00, 0xF8, 0x00, 0x00, 0x01, 0xFC, 0x01, 0xF0, 0x00, 0x00, 0x01, 0xFC, - 0x03, 0xE0, 0x00, 0x00, 0x03, 0xF8, 0x07, 0xC0, 0x00, 0x00, 0x03, 0xF8, - 0x0F, 0x80, 0x00, 0x00, 0x03, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0x07, 0xF0, - 0x3E, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x7C, 0x00, 0x00, 0x00, 0x07, 0xF0, - 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xE1, 0xF0, 0x00, 0x00, 0x00, 0x0F, 0xE3, - 0xE0, 0x00, 0x00, 0x00, 0x0F, 0xE7, 0xC0, 0x00, 0x00, 0x00, 0x0F, 0xEF, - 0x80, 0x00, 0x00, 0x00, 0x1F, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x70, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x20, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, - 0xFF, 0xFF, 0xF8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, - 0xF0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x0F, 0xFF, 0xFB, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xDF, 0xF9, - 0xFE, 0x00, 0x0F, 0xF0, 0x00, 0x3F, 0x9F, 0xF8, 0xFF, 0x00, 0x3F, 0xFE, - 0x00, 0x7F, 0x1F, 0xF8, 0x7F, 0x80, 0xFF, 0xFF, 0x00, 0xFE, 0x1F, 0xF8, - 0x3F, 0xC1, 0xFF, 0xFF, 0x81, 0xFC, 0x1F, 0xF8, 0x1F, 0xE3, 0xFF, 0xFF, - 0xC7, 0xF8, 0x1F, 0xF8, 0x0F, 0xF7, 0xFC, 0x1F, 0xEF, 0xF0, 0x1F, 0xF8, - 0x07, 0xFF, 0xF0, 0x07, 0xFF, 0xE0, 0x1F, 0xF8, 0x03, 0xFF, 0xC0, 0x03, - 0xFF, 0xC0, 0x1F, 0xF8, 0x01, 0xFF, 0xC0, 0x01, 0xFF, 0x80, 0x1F, 0xF8, - 0x00, 0xFF, 0x80, 0x00, 0xFF, 0x00, 0x1F, 0xF8, 0x00, 0x7F, 0x00, 0x00, - 0xFE, 0x00, 0x1F, 0xF8, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x1F, 0xF8, - 0x00, 0x3F, 0x00, 0x00, 0x7C, 0x00, 0x1F, 0xF8, 0x00, 0x3F, 0x00, 0x00, - 0x7C, 0x00, 0x1F, 0xF8, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x1F, 0xF8, - 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x1F, 0xF8, 0x00, 0x3F, 0x80, 0x00, - 0xF8, 0x00, 0x1F, 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x1F, 0xF8, - 0x00, 0x1F, 0xC0, 0x01, 0xF8, 0x00, 0x1F, 0xF8, 0x00, 0x1F, 0xE0, 0x03, - 0xF0, 0x00, 0x1F, 0xF8, 0x00, 0x0F, 0xF0, 0x0F, 0xF0, 0x00, 0x1F, 0xF8, - 0x00, 0x0F, 0xFF, 0xFF, 0xE0, 0x00, 0x1F, 0xF8, 0x00, 0x07, 0xFF, 0xFF, - 0xE0, 0x00, 0x1F, 0xF8, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, 0x1F, 0xF8, - 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x7F, 0xFE, - 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x1F, 0xF8, - 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x70, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x11, 0xF0, 0x00, 0x00, - 0x00, 0x00, 0x7B, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xF7, 0xE0, 0x00, 0x00, - 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, - 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xC0, 0x00, 0x00, - 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xC0, 0x00, 0x00, - 0x00, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, - 0x03, 0xFF, 0xBF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0x7F, 0x00, 0x00, 0x00, - 0x0F, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x7F, 0x00, 0x00, 0x00, - 0x3F, 0xF8, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xF0, 0xFE, 0x00, 0x00, 0x00, - 0xFF, 0xE0, 0xFE, 0x00, 0x00, 0x01, 0xFF, 0xC1, 0xFE, 0x00, 0x00, 0x03, - 0xFF, 0x81, 0xFC, 0x00, 0x00, 0x07, 0xFF, 0x01, 0xFC, 0x00, 0x00, 0x0F, - 0xFE, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xFC, 0x03, 0xF8, 0x00, 0x00, 0x3F, - 0xF8, 0x03, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x03, 0xF8, 0x00, 0x00, 0xFF, - 0xE0, 0x07, 0xF0, 0x00, 0x01, 0xFF, 0xC0, 0x07, 0xF0, 0x00, 0x03, 0xFF, - 0x80, 0x07, 0xF0, 0x00, 0x07, 0xFF, 0x00, 0x0F, 0xF0, 0x00, 0x0F, 0xFE, - 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xFC, 0x00, 0x0F, 0xE0, 0x00, 0x3F, 0xF8, - 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0xF0, 0x00, 0x1F, 0xC0, 0x00, 0xFF, 0xE0, - 0x00, 0x1F, 0xC0, 0x01, 0xFF, 0xC0, 0x00, 0x1F, 0xC0, 0x03, 0xFF, 0x80, - 0x00, 0x3F, 0x80, 0x07, 0xFF, 0x00, 0x00, 0x3F, 0x80, 0x0F, 0xFE, 0x00, - 0x00, 0x3F, 0x80, 0x1F, 0xFC, 0x00, 0x00, 0x7F, 0x80, 0x3F, 0xF8, 0x00, - 0x00, 0x7F, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x7F, 0x00, 0xFF, 0xE0, 0x00, - 0x00, 0x7F, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0xFE, 0x03, 0xFF, 0x80, 0x00, - 0x00, 0xFE, 0x07, 0xFF, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0xFE, 0x00, 0x00, - 0x01, 0xFC, 0x1F, 0xFC, 0x00, 0x00, 0x01, 0xFC, 0x3F, 0xF8, 0x00, 0x00, - 0x01, 0xFC, 0x7F, 0xF0, 0x00, 0x00, 0x03, 0xFC, 0xFF, 0xE0, 0x00, 0x00, - 0x03, 0xF9, 0xFF, 0xC0, 0x00, 0x00, 0x03, 0xFB, 0xFF, 0x80, 0x00, 0x00, - 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x00, 0x00, - 0x07, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x00, - 0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x00, 0x00, - 0x0F, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x00, - 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x70, 0x00, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01, 0xFF, - 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x03, 0xFF, 0xFE, 0x7F, 0xFF, 0xE0, - 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0xFC, - 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x0F, 0xFC, - 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0xFF, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x7F, - 0x80, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x03, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xE0, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x0F, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xF8, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xF8, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x3F, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7E, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x7C, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x7E, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7E, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x3F, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFC, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x1F, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xF8, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xF0, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x07, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xE0, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x01, 0xFE, 0x00, - 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, - 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x3F, 0xF0, - 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x3F, 0xF8, - 0x00, 0x00, 0x07, 0xFF, 0x80, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x03, 0xFF, - 0xFE, 0x7F, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, - 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, - 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, - 0xF0, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x07, 0xFF, - 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x7F, 0xFC, 0x00, - 0x00, 0x7E, 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x1F, 0x80, 0x00, 0x00, - 0x1F, 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x01, 0xF8, - 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x07, 0xF8, - 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x00, 0x1F, 0xC0, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x7E, - 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x1F, - 0x80, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0xFC, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x01, 0xFF, - 0xF0, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x03, - 0xF0, 0x7F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0xFF, 0xFC, 0x00, - 0x00, 0x00, 0x3F, 0x1F, 0xF9, 0xFF, 0x80, 0x00, 0x00, 0x0F, 0xCF, 0xF0, - 0x0F, 0xF0, 0x00, 0x00, 0x03, 0xF3, 0xF8, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0xFD, 0xFC, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3F, 0x7E, 0x00, 0x07, 0xE0, - 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xC0, - 0x00, 0x3F, 0x00, 0x00, 0x01, 0xFB, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0x7E, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x3F, 0xBF, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x0F, 0xCF, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x07, 0xF3, 0xF0, - 0x00, 0x0F, 0xC0, 0x00, 0x03, 0xF8, 0x7E, 0x00, 0x03, 0xE0, 0x00, 0x01, - 0xFE, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x00, 0xFF, 0x07, 0xF0, 0x00, 0xFE, - 0x00, 0x00, 0x7F, 0x80, 0xFE, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0xC0, 0x3F, - 0xE0, 0x7F, 0xF0, 0x00, 0x7F, 0xF0, 0x07, 0xFF, 0xFF, 0xFF, 0xC1, 0xFF, - 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xFD, 0xFF, 0xFF, 0xFC, 0x00, 0x00, - 0x3F, 0xFC, 0x0F, 0xFF, 0xFC, 0x00, 0x00, 0x01, 0xF8, 0x00, 0xFF, 0xF8, - 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x3F, - 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0xFF, 0xFC, - 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x7F, - 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x0F, - 0xF0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x7F, - 0x80, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, - 0x1F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x3F, - 0x80, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x1F, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x0F, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xF0, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x07, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x03, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x81, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xF0, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, - 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x3F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3E, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0x8F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC7, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xE3, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xF1, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFC, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7E, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x1F, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0x87, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0x83, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC1, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xE0, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xFF, 0xF0, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xF0, 0x1F, 0x80, - 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFC, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x1F, - 0xFF, 0xFF, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x1F, 0xF0, 0x7F, 0x81, 0xFC, - 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x0F, 0xE0, 0x7E, 0x00, 0x00, 0x00, 0x0F, - 0xE0, 0x03, 0xF0, 0x3F, 0x80, 0x00, 0x00, 0x07, 0xE0, 0x00, 0xFC, 0x0F, - 0xE0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x7E, 0x03, 0xF8, 0x00, 0x00, 0x03, - 0xF0, 0x00, 0x1F, 0x01, 0xFE, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x0F, 0x80, - 0x7F, 0x80, 0x00, 0x00, 0xF8, 0x00, 0x07, 0xC0, 0x1F, 0xE0, 0x00, 0x00, - 0x7C, 0x00, 0x03, 0xE0, 0x07, 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x01, 0xF0, - 0x01, 0xFF, 0x80, 0x00, 0x1F, 0x80, 0x00, 0xF8, 0x00, 0x7F, 0xF0, 0x00, - 0x07, 0xC0, 0x00, 0xFC, 0x00, 0x1F, 0xFF, 0x00, 0x1F, 0xF0, 0x00, 0xFE, - 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x7E, 0x00, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xF1, 0xFF, - 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x1F, - 0xFF, 0xE3, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x78, - 0x00, 0x01, 0xFF, 0xFE, 0x00, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0x00, 0xFE, - 0x00, 0x0F, 0xFF, 0xFF, 0xC0, 0xFE, 0x00, 0x1F, 0xFF, 0xFF, 0xE0, 0xFF, - 0x00, 0x3F, 0xFD, 0xFF, 0xF0, 0xFF, 0x80, 0x7F, 0x80, 0x1F, 0xF0, 0xFF, - 0x80, 0xFF, 0x00, 0x07, 0xF8, 0xFF, 0xC1, 0xFC, 0x00, 0x03, 0xFC, 0xFF, - 0xE1, 0xF8, 0x00, 0x01, 0xFC, 0xFF, 0xF3, 0xF8, 0x00, 0x00, 0xFE, 0xFF, - 0xF3, 0xF0, 0x00, 0x00, 0x7E, 0xFF, 0xFB, 0xE0, 0x00, 0x00, 0x7E, 0xFD, - 0xFF, 0xE0, 0x00, 0x00, 0x3F, 0xFC, 0xFF, 0xE0, 0x00, 0x00, 0x3F, 0xFC, - 0xFF, 0xE0, 0x00, 0x00, 0x3F, 0xFC, 0x7F, 0xC0, 0x00, 0x00, 0x3F, 0xFC, - 0x3F, 0xC0, 0x00, 0x00, 0x3F, 0xFC, 0x3F, 0xE0, 0x00, 0x00, 0x3F, 0xFC, - 0x1F, 0xE0, 0x00, 0x00, 0x3F, 0xFC, 0x0F, 0xE0, 0x00, 0x00, 0x3F, 0xFC, - 0x07, 0xE0, 0x00, 0x00, 0x3F, 0xFC, 0x07, 0xF0, 0x00, 0x00, 0x7E, 0xFC, - 0x03, 0xF8, 0x00, 0x00, 0x7E, 0xFC, 0x01, 0xF8, 0x00, 0x00, 0xFE, 0xFC, - 0x01, 0xFC, 0x00, 0x01, 0xFC, 0xFC, 0x00, 0xFE, 0x00, 0x03, 0xFC, 0xFC, - 0x00, 0x7F, 0x80, 0x07, 0xF8, 0xFC, 0x00, 0x7F, 0xE0, 0x3F, 0xF0, 0xFC, - 0x00, 0x3F, 0xFF, 0xFF, 0xE0, 0xFC, 0x00, 0x1F, 0xFF, 0xFF, 0xC0, 0xFC, - 0x00, 0x0F, 0xFF, 0xFF, 0x80, 0xFC, 0x00, 0x0F, 0xFF, 0xFE, 0x00, 0xFC, - 0x00, 0x07, 0xFF, 0xF8, 0x00, 0xFC, 0x00, 0x03, 0xFF, 0x80, 0x00, 0xFC, - 0x00, 0x03, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xFC, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x00, 0xFC, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0xFC, - 0x00, 0x00, 0x0F, 0xE0, 0x00, 0xFC, 0x00, 0x00, 0x07, 0xF0, 0x00, 0xFC, - 0x00, 0x00, 0x07, 0xF0, 0x00, 0xFC, 0x00, 0x00, 0x03, 0xF8, 0x00, 0xFC, - 0x00, 0x00, 0x01, 0xFC, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC, - 0x00, 0x00, 0x00, 0xFE, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0xFC, - 0x00, 0x00, 0x00, 0x3F, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x80, 0xFC, - 0x00, 0x00, 0x00, 0x1F, 0xC0, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0xFC, - 0x00, 0x00, 0x00, 0x0F, 0xE0, 0xFC, 0x00, 0x00, 0x00, 0x07, 0xF0, 0xFC, - 0x00, 0x00, 0x00, 0x03, 0xF8, 0xFC, 0x00, 0x00, 0x00, 0x01, 0xF8, 0xFC, - 0x00, 0x00, 0x00, 0x01, 0xFC, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0x7E, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x78, - 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, - 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x00, 0x00, - 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0x00, 0x00, - 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xF0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0x00, 0x00, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x00, 0x07, 0xFF, 0x80, 0x1F, - 0x80, 0x00, 0x1F, 0xFF, 0xE0, 0x0F, 0x80, 0x00, 0x3F, 0xFF, 0xF0, 0x0F, - 0xC0, 0x00, 0x7F, 0xFF, 0xF8, 0x0F, 0xC0, 0x00, 0xFF, 0xFF, 0xFC, 0x07, - 0xE0, 0x00, 0xFF, 0x03, 0xFC, 0x07, 0xF0, 0x01, 0xFC, 0x00, 0xFE, 0x03, - 0xF8, 0x01, 0xF8, 0x00, 0x7E, 0x01, 0xFC, 0x03, 0xF0, 0x00, 0x3F, 0x01, - 0xFE, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0xFF, 0x03, 0xE0, 0x00, 0x3F, 0x00, - 0x7F, 0xC3, 0xE0, 0x00, 0x1F, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x1F, 0x00, - 0x1F, 0xFF, 0xE0, 0x00, 0x1F, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x3F, 0x00, - 0x03, 0xFF, 0xF0, 0x00, 0x3F, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x3E, 0x00, - 0x00, 0x1F, 0xF8, 0x00, 0x7E, 0x00, 0x00, 0x01, 0xFC, 0x00, 0xFE, 0x00, - 0x00, 0x00, 0xFE, 0x01, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF8, 0x00, - 0x00, 0x00, 0x7F, 0xFF, 0xF0, 0x10, 0x00, 0x00, 0x3F, 0xFF, 0xE0, 0x78, - 0x00, 0x00, 0x0F, 0xFF, 0xC0, 0xFC, 0x00, 0x00, 0x07, 0xFF, 0x80, 0xFC, - 0x00, 0x00, 0x00, 0x7F, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x7F, - 0x00, 0x00, 0x00, 0xFE, 0x00, 0x3F, 0x80, 0x00, 0x01, 0xFC, 0x00, 0x1F, - 0xC0, 0x00, 0x03, 0xFC, 0x00, 0x0F, 0xF0, 0x00, 0x0F, 0xF8, 0x00, 0x07, - 0xFC, 0x00, 0x3F, 0xF0, 0x00, 0x03, 0xFF, 0xC3, 0xFF, 0xE0, 0x00, 0x01, - 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, - 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0xFF, 0x80, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x1F, - 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xF8, 0xFF, - 0xFF, 0xFF, 0xF9, 0xFE, 0x01, 0xFF, 0xFF, 0xFF, 0x8F, 0xE0, 0x03, 0xF8, - 0x00, 0x00, 0xFE, 0x00, 0x0F, 0xC0, 0x00, 0x07, 0xE0, 0x00, 0x7E, 0x00, - 0x00, 0x3F, 0x00, 0x01, 0xF0, 0x00, 0x01, 0xF0, 0x00, 0x0F, 0xC0, 0x00, - 0x0F, 0x80, 0x00, 0x7E, 0x00, 0x00, 0x7C, 0x00, 0x03, 0xF0, 0x00, 0x03, - 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, - 0x00, 0x07, 0xC0, 0x00, 0x07, 0xE0, 0x00, 0x7E, 0x00, 0x00, 0x1F, 0x80, - 0x07, 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x00, 0x03, 0xFC, 0x07, - 0xF8, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xFF, 0xF8, - 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xF8, 0x00, - 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, - 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, - 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xC0, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x3D, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0xFB, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xE0, - 0x00, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x80, - 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xE0, 0x00, - 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00, - 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, - 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x00, - 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x00, - 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, 0x00, - 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x00, 0x00, - 0x0F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x03, - 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x0F, - 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFF, - 0xF0, 0x00, 0x00, 0x00, 0x01, 0xF7, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xEF, - 0xC0, 0x00, 0x00, 0x00, 0x0F, 0xDF, 0x80, 0x00, 0x00, 0x00, 0x1F, 0x9F, - 0x80, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x7E, - 0x00, 0x00, 0x00, 0x01, 0xF8, 0x7E, 0x00, 0x00, 0x00, 0x07, 0xF0, 0xFC, - 0x00, 0x00, 0x00, 0x0F, 0xC0, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x81, 0xFC, - 0x00, 0x00, 0x00, 0xFE, 0x01, 0xFC, 0x00, 0x00, 0x03, 0xFC, 0x03, 0xFC, - 0x00, 0x00, 0x0F, 0xF0, 0x03, 0xFE, 0x00, 0x00, 0x3F, 0xC0, 0x03, 0xFE, - 0x00, 0x01, 0xFF, 0x00, 0x03, 0xFF, 0x80, 0x0F, 0xFC, 0x00, 0x03, 0xFF, - 0xFF, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x01, 0xFF, - 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, - 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xE0, 0x00, 0x00, - 0x00, 0x01, 0xF7, 0xE0, 0x00, 0x00, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x00, - 0x00, 0x0F, 0xDF, 0x80, 0x00, 0x00, 0x00, 0x1F, 0x9F, 0x80, 0x00, 0x00, - 0x00, 0x7E, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x7E, 0x00, 0x00, 0x00, - 0x01, 0xF8, 0x7E, 0x00, 0x00, 0x00, 0x07, 0xE0, 0xFC, 0x00, 0x00, 0x00, - 0x0F, 0xC1, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0x81, 0xF8, 0x00, 0x00, 0x00, - 0x7E, 0x03, 0xF0, 0x00, 0x00, 0x00, 0xFC, 0x07, 0xF0, 0x00, 0x00, 0x01, - 0xF8, 0x07, 0xE0, 0x00, 0x00, 0x07, 0xE0, 0x0F, 0xC0, 0x00, 0x00, 0x0F, - 0xC0, 0x0F, 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x1F, 0x80, 0x00, 0x00, 0x7E, - 0x00, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x00, 0x01, 0xF8, - 0x00, 0x7E, 0x00, 0x00, 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xC0, - 0x00, 0xFC, 0x00, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x00, 0x7E, 0x00, - 0x03, 0xF0, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x03, 0xF8, 0x00, - 0x07, 0xE0, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x0F, 0xC0, 0x00, - 0x0F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0x80, 0x00, 0x7E, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0x7E, 0x00, 0x07, 0xE0, 0x00, 0x00, 0xFC, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0xFC, 0x00, 0x3F, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x00, 0x03, - 0xF0, 0x00, 0xFC, 0x00, 0x00, 0x03, 0xF0, 0x03, 0xF0, 0x00, 0x00, 0x07, - 0xE0, 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xC0, 0x0F, 0xC0, 0x00, 0x00, 0x0F, - 0xC0, 0x3F, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x7E, 0x00, 0x00, 0x00, 0x1F, - 0x80, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x7E, - 0x07, 0xE0, 0x00, 0x00, 0x00, 0x7E, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0xFC, - 0x3F, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x7E, 0x00, 0x00, 0x00, 0x01, 0xF9, - 0xFC, 0x00, 0x00, 0x00, 0x03, 0xF3, 0xF0, 0x00, 0x00, 0x00, 0x07, 0xE7, - 0xE0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x0F, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, - 0x00, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7C, 0x00, 0x1E, 0x00, 0x00, 0x1C, 0x00, 0x0F, 0xBE, - 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, 0x07, 0xDF, 0x80, 0x07, 0xC0, 0x00, - 0x0F, 0x80, 0x07, 0xEF, 0xC0, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x03, 0xF7, - 0xE0, 0x01, 0xF8, 0x00, 0x07, 0xE0, 0x01, 0xF9, 0xF8, 0x00, 0xFC, 0x00, - 0x07, 0xE0, 0x01, 0xF8, 0xFC, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x00, 0xFC, - 0x7E, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x7E, 0x1F, 0x80, 0x0F, 0xE0, - 0x01, 0xF8, 0x00, 0x7E, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x3F, - 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x3F, 0x81, 0xF8, 0x00, 0x7E, - 0x00, 0x7E, 0x00, 0x1F, 0x80, 0xFC, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x0F, - 0xC0, 0x7E, 0x00, 0x1F, 0x80, 0x1F, 0x80, 0x0F, 0xE0, 0x1F, 0x80, 0x07, - 0xE0, 0x1F, 0x80, 0x07, 0xE0, 0x0F, 0xC0, 0x03, 0xF0, 0x0F, 0xC0, 0x03, - 0xF0, 0x07, 0xE0, 0x01, 0xF8, 0x07, 0xE0, 0x03, 0xF8, 0x01, 0xF8, 0x00, - 0x7E, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0xFC, 0x00, 0x3F, 0xFF, 0xF0, 0x00, - 0xFC, 0x00, 0x7F, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0xFE, 0x00, 0x1F, 0x80, - 0x07, 0xFF, 0xF8, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x07, 0xFF, 0xFE, 0x00, - 0x3F, 0x00, 0x03, 0xF0, 0x07, 0xFF, 0xFF, 0x80, 0x3F, 0x80, 0x01, 0xF8, - 0x07, 0xFF, 0xFF, 0xE0, 0x1F, 0x80, 0x00, 0xFC, 0x07, 0xF8, 0x07, 0xF8, - 0x0F, 0xC0, 0x00, 0x3F, 0x03, 0xF8, 0x01, 0xFC, 0x0F, 0xC0, 0x00, 0x1F, - 0x83, 0xF8, 0x00, 0x7F, 0x07, 0xE0, 0x00, 0x0F, 0xC1, 0xF8, 0x00, 0x1F, - 0x83, 0xF0, 0x00, 0x03, 0xF0, 0xFC, 0x00, 0x0F, 0xC3, 0xF0, 0x00, 0x01, - 0xF8, 0xFC, 0x00, 0x03, 0xF1, 0xF8, 0x00, 0x00, 0xFC, 0x7E, 0x00, 0x01, - 0xF8, 0xFC, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0xFC, 0xFC, 0x00, 0x00, - 0x1F, 0x9F, 0x80, 0x00, 0x7E, 0x7E, 0x00, 0x00, 0x0F, 0xCF, 0xC0, 0x00, - 0x3F, 0x7F, 0x00, 0x00, 0x03, 0xF3, 0xE0, 0x00, 0x1F, 0xBF, 0x00, 0x00, - 0x01, 0xF9, 0xF8, 0x00, 0x1F, 0x9F, 0x80, 0x00, 0x00, 0xFC, 0xFE, 0x00, - 0x1F, 0xDF, 0xC0, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x0F, 0xEF, 0xC0, 0x00, - 0x00, 0x1F, 0x9F, 0xE0, 0x1F, 0xE7, 0xE0, 0x00, 0x00, 0x0F, 0xC7, 0xFC, - 0x3F, 0xE7, 0xF0, 0x00, 0x00, 0x03, 0xF1, 0xFF, 0xFF, 0xF3, 0xF0, 0x00, - 0x00, 0x01, 0xF8, 0x7F, 0xFF, 0xF1, 0xF8, 0x00, 0x00, 0x00, 0xFC, 0x1F, - 0xFF, 0xF1, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x07, 0xFF, 0xE0, 0xFC, 0x00, - 0x00, 0x00, 0x1F, 0x81, 0xFF, 0xE0, 0x7E, 0x00, 0x00, 0x00, 0x0F, 0xE0, - 0xFF, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x03, 0xF0, 0xFC, 0xFC, 0x3F, 0x00, - 0x00, 0x00, 0x01, 0xF8, 0x7E, 0x7E, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x7E, - 0x7F, 0x1F, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x0F, 0xCF, 0xC0, - 0x00, 0x00, 0x00, 0x1F, 0x9F, 0x87, 0xE7, 0xE0, 0x00, 0x00, 0x00, 0x07, - 0xFF, 0xC1, 0xF7, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0xFF, 0xF0, - 0x00, 0x00, 0x00, 0x01, 0xFF, 0xE0, 0x7F, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0x7F, 0xF0, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x0F, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xF8, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x00, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x00, 0x00, 0x00, - 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x11, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xF0, 0x00, 0x00, 0x00, - 0x01, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x00, - 0x0F, 0xCF, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0x8F, 0xE0, 0x00, 0x00, 0x00, - 0xFE, 0x1F, 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x1F, 0xC0, 0x00, 0x00, 0x07, - 0xF0, 0x1F, 0xC0, 0x00, 0x00, 0x1F, 0xC0, 0x3F, 0x80, 0x00, 0x00, 0x7F, - 0x00, 0x3F, 0x80, 0x00, 0x00, 0xFE, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF8, - 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x00, 0x00, 0x1F, 0x80, - 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x0F, 0xE0, 0x00, - 0x00, 0xFE, 0xFF, 0xBF, 0x80, 0x00, 0x01, 0xFF, 0xFF, 0xFE, 0x00, 0x00, - 0x01, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xF0, 0x00, 0x00, - 0x03, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xE0, 0x00, 0x00, - 0x3F, 0xC0, 0x3F, 0xC0, 0x00, 0x00, 0x7F, 0x00, 0x1F, 0xC0, 0x00, 0x01, - 0xFC, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x80, 0x00, 0x07, - 0xE0, 0x00, 0x3F, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x7E, 0x00, 0x00, 0x3F, - 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xF8, 0x00, 0x00, 0xFC, - 0x00, 0x01, 0xF0, 0x00, 0x01, 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x01, 0xF0, - 0x00, 0x0F, 0xC0, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, 0x00, 0x07, 0xE0, - 0x00, 0x7E, 0x00, 0x00, 0x07, 0xE0, 0x01, 0xFC, 0x00, 0x00, 0x0F, 0xF0, - 0x07, 0xF0, 0x00, 0x00, 0x0F, 0xF0, 0x3F, 0xE0, 0x00, 0x00, 0x0F, 0xFF, - 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0xFF, - 0xFE, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0xFF, - 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0xE1, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x01, - 0xFC, 0x00, 0x00, 0x7F, 0x00, 0x01, 0xFC, 0x00, 0x01, 0xFC, 0x00, 0x01, - 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x03, 0xF8, 0x00, 0x0F, 0xE0, 0x00, 0x03, - 0xF8, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0xFE, 0x00, 0x00, 0x07, - 0xF0, 0x01, 0xFC, 0x00, 0x00, 0x07, 0xF0, 0x07, 0xF0, 0x00, 0x00, 0x07, - 0xF0, 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0xE0, 0x7F, 0x00, 0x00, 0x00, 0x0F, - 0xE0, 0xFE, 0x00, 0x00, 0x00, 0x0F, 0xE3, 0xF8, 0x00, 0x00, 0x00, 0x0F, - 0xEF, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x00, 0x00, 0x1F, - 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3E, - 0x70, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x7F, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x8F, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0xC1, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x3F, 0xC0, 0x00, - 0x00, 0x00, 0x0F, 0xF0, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x00, - 0xFF, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x01, - 0xFE, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x7F, 0x80, - 0x00, 0x00, 0x7F, 0x80, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x3F, 0xC0, 0x00, - 0x01, 0xFE, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x0F, - 0xF0, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x00, 0xFF, - 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x1F, 0xEF, 0xF9, 0xFE, 0x00, 0x00, - 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, - 0x80, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x03, - 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x87, 0xFE, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0x80, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x07, - 0xF0, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x03, - 0xF0, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x07, 0xE0, 0x00, - 0x00, 0x00, 0x7E, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, - 0x7E, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x01, - 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0x00, 0x0F, 0x80, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, - 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, - 0x1F, 0x80, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x07, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0x87, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, - 0xFF, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, - 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x1F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x07, 0xF0, - 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x07, 0xF0, 0x00, 0xFF, 0xFF, 0xE0, 0x00, - 0x03, 0xF8, 0x00, 0xFF, 0xFF, 0xF8, 0x00, 0x03, 0xF8, 0x00, 0xFF, 0xFF, - 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x7F, 0x81, 0xFF, 0x00, 0x01, 0xF8, 0x00, - 0x7F, 0x00, 0x3F, 0xC0, 0x01, 0xFC, 0x00, 0x3F, 0x00, 0x0F, 0xE0, 0x01, - 0xFC, 0x00, 0x3F, 0x00, 0x03, 0xF8, 0x01, 0xFC, 0x00, 0x1F, 0x80, 0x00, - 0xFC, 0x00, 0xFE, 0x00, 0x0F, 0x80, 0x00, 0x7E, 0x00, 0xFE, 0x00, 0x0F, - 0xC0, 0x00, 0x3F, 0x00, 0xFE, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0x80, 0x7F, - 0x00, 0x03, 0xF0, 0x00, 0x07, 0xC0, 0x7F, 0x00, 0x01, 0xF8, 0x00, 0x07, - 0xE0, 0x7F, 0x00, 0x00, 0x7C, 0x00, 0x03, 0xF0, 0x3F, 0x00, 0x00, 0x3F, - 0x00, 0x01, 0xF8, 0x3F, 0x80, 0x00, 0x1F, 0x80, 0x01, 0xFC, 0x3F, 0x80, - 0x00, 0x0F, 0xE0, 0x00, 0xFC, 0x3F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0xFE, - 0x1F, 0xC0, 0x00, 0x01, 0xFE, 0x01, 0xFE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF7, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xFC, - 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, - 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, - 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, - 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, - 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, - 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xC0, 0xFC, 0x0F, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x3E, 0x00, 0x07, 0x80, 0x01, - 0xE0, 0x00, 0x7C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF8, 0x00, 0x3E, - 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0x7C, 0x00, 0x0F, 0x00, 0x03, 0xC0, - 0x00, 0xF8, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x01, 0xF0, 0x00, 0x7C, 0x00, - 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF8, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x01, - 0xF0, 0x00, 0x7C, 0x00, 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF8, 0x00, 0x1E, - 0x00, 0x07, 0x80, 0x01, 0xF0, 0x00, 0x7C, 0x00, 0x0F, 0x00, 0x03, 0xC0, - 0x00, 0xF8, 0x00, 0x1E, 0x00, 0x07, 0x80, 0x01, 0xF0, 0x00, 0x7C, 0x00, - 0x0F, 0x00, 0x03, 0xC0, 0x00, 0xF8, 0x00, 0x1E, 0x00, 0x07, 0x80, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, - 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, - 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, - 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, - 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, - 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, - 0xF0, 0x1F, 0x01, 0xF0, 0x1F, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x00, 0x3E, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x07, 0xF0, 0x00, - 0x01, 0xFE, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x3F, 0xE0, 0x00, 0x0F, 0xFC, - 0x00, 0x07, 0xDF, 0x00, 0x01, 0xF3, 0xE0, 0x00, 0xF8, 0xF8, 0x00, 0x3E, - 0x1F, 0x00, 0x1F, 0x07, 0xC0, 0x07, 0xC1, 0xF8, 0x03, 0xF0, 0x3E, 0x00, - 0xF8, 0x0F, 0xC0, 0x7E, 0x01, 0xF0, 0x1F, 0x00, 0x7E, 0x07, 0xC0, 0x0F, - 0x83, 0xF0, 0x03, 0xE0, 0xF8, 0x00, 0xFC, 0x7E, 0x00, 0x1F, 0x1F, 0x00, - 0x07, 0xEF, 0xC0, 0x00, 0xFB, 0xF0, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xFE, 0x0F, 0xE0, 0xFC, - 0x0F, 0xC1, 0xF8, 0x1F, 0x81, 0xF0, 0x1F, 0x03, 0xE0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x7E, - 0x7E, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x00, 0x00, 0x00, 0x00, 0xFE, - 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, - 0x1F, 0x80, 0x00, 0x00, 0x01, 0xFC, 0x1F, 0x80, 0x00, 0x00, 0x01, 0xF8, - 0x1F, 0x80, 0x00, 0x00, 0x01, 0xF8, 0x0F, 0xC0, 0x00, 0x00, 0x03, 0xF0, - 0x0F, 0xC0, 0x00, 0x00, 0x03, 0xF0, 0x0F, 0xC0, 0x00, 0x00, 0x03, 0xF0, - 0x07, 0xE0, 0x00, 0x00, 0x07, 0xE0, 0x07, 0xE0, 0x00, 0x00, 0x07, 0xE0, - 0x07, 0xE0, 0x00, 0x00, 0x07, 0xE0, 0x03, 0xF0, 0x00, 0x00, 0x0F, 0xC0, - 0x03, 0xF0, 0x00, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0x00, 0x0F, 0xC0, - 0x01, 0xF8, 0x00, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x00, 0x1F, 0x80, - 0x01, 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x00, 0xFC, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7F, 0x00, - 0x00, 0x7E, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x7E, 0x00, 0x00, 0x7F, 0xFF, - 0xE0, 0x3F, 0x00, 0x00, 0xFF, 0xFF, 0xF0, 0x3F, 0x00, 0x00, 0xFF, 0xFF, - 0xF8, 0x3F, 0x00, 0x00, 0xFF, 0xFF, 0xFC, 0x1F, 0x80, 0x01, 0xFF, 0xFF, - 0xFE, 0x1F, 0x80, 0x01, 0xFF, 0x01, 0xFF, 0x1F, 0x80, 0x01, 0xFE, 0x00, - 0x7F, 0x0F, 0xC0, 0x03, 0xF8, 0x00, 0x3F, 0x8F, 0xC0, 0x03, 0xF8, 0x00, - 0x1F, 0x8F, 0xC0, 0x03, 0xF0, 0x00, 0x1F, 0x87, 0xE0, 0x07, 0xF0, 0x00, - 0x0F, 0xC7, 0xE0, 0x07, 0xF0, 0x00, 0x0F, 0xC7, 0xE0, 0x07, 0xE0, 0x00, - 0x0F, 0xC3, 0xF0, 0x0F, 0xE0, 0x00, 0x0F, 0xC3, 0xF0, 0x0F, 0xF0, 0x00, - 0x0F, 0x83, 0xF0, 0x1F, 0xF0, 0x00, 0x0F, 0x81, 0xF8, 0x1F, 0xF0, 0x00, - 0x1F, 0x81, 0xF8, 0x1F, 0xF8, 0x00, 0x1F, 0x80, 0xF8, 0x3F, 0xF8, 0x00, - 0x3F, 0x00, 0xFC, 0x3F, 0xFC, 0x00, 0x7F, 0x00, 0xFC, 0x3F, 0xFF, 0x01, - 0xFE, 0x00, 0x7E, 0x7E, 0x7F, 0xFF, 0xFE, 0x00, 0x7E, 0x7E, 0x7F, 0xFF, - 0xFC, 0x00, 0x7E, 0x7E, 0x1F, 0xFF, 0xF8, 0x00, 0x3F, 0x7C, 0x0F, 0xFF, - 0xE0, 0x00, 0x3F, 0x7C, 0x07, 0xFF, 0xC0, 0x00, 0x3E, 0x38, 0x00, 0xFE, - 0x00, 0x00, 0x0C, 0x20, 0x00, 0x18, 0x00, 0x00, 0x01, 0xF0, 0x07, 0xFF, - 0x80, 0x00, 0x03, 0xE0, 0x7F, 0xFF, 0xE0, 0x00, 0x07, 0xC3, 0xFF, 0xFF, - 0xF0, 0x00, 0x0F, 0x8F, 0xFF, 0xFF, 0xF0, 0x00, 0x1F, 0x3F, 0xFF, 0xFF, - 0xF0, 0x00, 0x3E, 0xFF, 0xE0, 0x3F, 0xF8, 0x00, 0x7F, 0xFE, 0x00, 0x0F, - 0xF0, 0x00, 0xFF, 0xF0, 0x00, 0x0F, 0xF0, 0x01, 0xFF, 0xC0, 0x00, 0x07, - 0xF0, 0x03, 0xFF, 0x00, 0x00, 0x07, 0xF0, 0x07, 0xFC, 0x00, 0x00, 0x07, - 0xE0, 0x0F, 0xF0, 0x00, 0x00, 0x0F, 0xE0, 0x1F, 0xC0, 0x00, 0x00, 0x0F, - 0xC0, 0x3F, 0x80, 0x00, 0x00, 0x1F, 0x80, 0x7E, 0x00, 0x00, 0x00, 0x1F, - 0x80, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x7E, - 0x03, 0xF0, 0x00, 0x00, 0x00, 0x7C, 0x07, 0xC0, 0x00, 0x00, 0x00, 0xF8, - 0x0F, 0x80, 0x00, 0x00, 0x01, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x03, 0xF0, - 0x3E, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x7E, 0x00, 0x00, 0x00, 0x1F, 0x80, - 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x7E, 0x03, - 0xF0, 0x00, 0x00, 0x00, 0xFE, 0x07, 0xF0, 0x00, 0x00, 0x03, 0xFE, 0x0F, - 0xE0, 0x00, 0x00, 0x07, 0xFE, 0x1F, 0xE0, 0x00, 0x00, 0x1F, 0xFC, 0x3F, - 0xE0, 0x00, 0x00, 0x7F, 0xFC, 0x7F, 0xE0, 0x00, 0x01, 0xFD, 0xFC, 0xFF, - 0xE0, 0x00, 0x07, 0xFB, 0xF9, 0xFF, 0xE0, 0x00, 0x1F, 0xE3, 0xF3, 0xFF, - 0xF0, 0x00, 0xFF, 0x87, 0xF7, 0xFF, 0xFF, 0x3F, 0xFE, 0x07, 0xEF, 0xFF, - 0xFF, 0xFF, 0xF8, 0x0F, 0xDF, 0x9F, 0xFF, 0xFF, 0xE0, 0x1F, 0xBE, 0x1F, - 0xFF, 0xFF, 0x00, 0x3F, 0x7C, 0x0F, 0xFF, 0xFC, 0x00, 0x3F, 0xF8, 0x07, - 0xFF, 0xC0, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, - 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x80, 0x00, - 0x00, 0x00, 0x0F, 0xDF, 0x80, 0x00, 0x00, 0x00, 0x1F, 0xBF, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xFC, 0x00, 0x00, - 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0x00, 0x03, 0xF3, 0xF8, 0x00, 0x00, - 0x00, 0x0F, 0xE7, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0x8F, 0xF8, 0x00, 0x00, - 0x00, 0x7F, 0x1F, 0xF8, 0x00, 0x00, 0x01, 0xFC, 0x3F, 0xF8, 0x00, 0x00, - 0x07, 0xF8, 0x7F, 0xF8, 0x00, 0x00, 0x1F, 0xE0, 0xFF, 0xF8, 0x00, 0x00, - 0xFF, 0x81, 0xF7, 0xFC, 0x00, 0x03, 0xFE, 0x03, 0xE7, 0xFE, 0x00, 0x3F, - 0xF8, 0x07, 0xC7, 0xFF, 0xFF, 0xFF, 0xE0, 0x0F, 0x87, 0xFF, 0xFF, 0xFF, - 0x80, 0x1F, 0x03, 0xFF, 0xFF, 0xFC, 0x00, 0x3E, 0x01, 0xFF, 0xFF, 0xF0, - 0x00, 0x7C, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x70, 0x00, 0x1F, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0xFF, - 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, - 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0x1F, 0xF9, 0xFF, 0x80, 0x00, 0x7F, 0xF8, - 0x0F, 0xF0, 0x0F, 0xF0, 0x00, 0x3F, 0xF0, 0x03, 0xF8, 0x00, 0xFE, 0x00, - 0x3F, 0xF0, 0x01, 0xFC, 0x00, 0x1F, 0x80, 0x1F, 0xF0, 0x00, 0x7E, 0x00, - 0x07, 0xE0, 0x0F, 0xF8, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x03, 0xFC, 0x00, - 0x0F, 0xC0, 0x00, 0x3F, 0x01, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, - 0xFE, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x7F, 0x80, 0x00, 0x3F, 0x00, - 0x00, 0xFC, 0x1F, 0xC0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x0F, 0xE0, 0x00, - 0x01, 0xF0, 0x00, 0x0F, 0xC3, 0xF0, 0x00, 0x00, 0x7E, 0x00, 0x07, 0xF1, - 0xFC, 0x00, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x7E, 0x00, 0x00, 0x03, 0xF0, - 0x00, 0xFE, 0x3F, 0x80, 0x00, 0x00, 0xFF, 0x00, 0x7F, 0x0F, 0xC0, 0x00, - 0x00, 0x1F, 0xF0, 0x7F, 0xC3, 0xF0, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xE0, - 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xF0, 0x7E, 0x00, 0x00, 0x00, 0x0F, - 0xFF, 0xF8, 0x1F, 0x80, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x07, 0xE0, 0x00, - 0x00, 0x00, 0x1F, 0xF8, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0xFE, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xF0, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x07, - 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x7F, 0x80, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x03, 0xFC, 0x00, - 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x1F, 0xF0, 0x00, - 0x0F, 0xFC, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x3F, - 0xFC, 0x00, 0x00, 0x1F, 0xFF, 0xC1, 0xFF, 0xFE, 0x00, 0x00, 0x03, 0xFF, - 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFE, 0x00, 0x00, - 0x00, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFE, - 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, - 0xC0, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, 0xFC, 0x1F, 0xFF, - 0xE0, 0x00, 0x7E, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0xFC, 0x00, 0x00, 0x7F, - 0xF0, 0x01, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x03, 0xF0, 0x00, 0x00, 0x1F, - 0xF0, 0x07, 0xE0, 0x00, 0x00, 0x1F, 0xF0, 0x0F, 0xC0, 0x00, 0x00, 0x1F, - 0xE0, 0x1F, 0x80, 0x00, 0x00, 0x1F, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0x1F, - 0xE0, 0x7E, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0xFC, 0x00, 0x00, 0x00, 0x1F, - 0xC1, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0xC3, 0xF0, 0x00, 0x00, 0x00, 0x1F, - 0x87, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0x8F, 0xC0, 0x00, 0x00, 0x00, 0x3F, - 0x1F, 0x80, 0x00, 0x00, 0x00, 0x7E, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x7E, - 0x7E, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFC, 0x00, 0x00, 0x00, 0x01, 0xF9, - 0xF8, 0x00, 0x00, 0x00, 0x01, 0xFB, 0xF0, 0x00, 0x00, 0x00, 0x03, 0xF7, - 0xE0, 0x00, 0x00, 0x00, 0x07, 0xEF, 0xC0, 0x00, 0x00, 0x00, 0x0F, 0xDF, - 0x80, 0x00, 0x00, 0x00, 0x1F, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x7E, - 0x00, 0x00, 0x00, 0x00, 0x3E, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xF7, 0xE0, - 0x00, 0x00, 0x00, 0x03, 0xEF, 0xC0, 0x00, 0x00, 0x00, 0x0F, 0xDF, 0x80, - 0x00, 0x00, 0x00, 0x1F, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x7E, 0x00, - 0x00, 0x00, 0x00, 0x7E, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xF8, 0x00, - 0x00, 0x00, 0x03, 0xF3, 0xF0, 0x00, 0x00, 0x00, 0x07, 0xE7, 0xE0, 0x00, - 0x00, 0x00, 0x0F, 0xCF, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0x1F, 0x80, 0x00, - 0x00, 0x00, 0x7E, 0x3F, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x7E, 0x00, 0x00, - 0x00, 0x07, 0xF0, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xC1, 0xF8, 0x00, 0x00, - 0x00, 0x3F, 0x83, 0xF0, 0x00, 0x00, 0x00, 0xFE, 0x07, 0xE0, 0x00, 0x00, - 0x03, 0xFC, 0x0F, 0xC0, 0x00, 0x00, 0x0F, 0xF0, 0x1F, 0x80, 0x00, 0x00, - 0x3F, 0xC0, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x7E, 0x00, 0x00, 0x07, - 0xFC, 0x00, 0xFC, 0x00, 0x00, 0x3F, 0xF0, 0x01, 0xF8, 0x00, 0x01, 0xFF, - 0xC0, 0x03, 0xF8, 0x00, 0x1F, 0xFF, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xF8, - 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0x00, - 0x00, 0x0F, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x80, 0x00, - 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xF0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC3, - 0xFE, 0x00, 0x00, 0x00, 0x0F, 0x9F, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0x7F, - 0xFF, 0x80, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xFF, - 0xFF, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0x80, - 0xFF, 0x80, 0x00, 0x03, 0xFE, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xF8, 0x00, - 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x7E, 0x00, 0x00, 0x1F, 0x80, 0x00, - 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7E, 0x00, 0x01, - 0xF8, 0x00, 0x00, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x01, 0xF0, 0x00, 0x07, - 0xE0, 0x00, 0x03, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x07, 0xE0, 0x00, 0x1F, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0xFC, - 0x00, 0x00, 0x3F, 0xC0, 0x03, 0xF8, 0x00, 0x00, 0x7F, 0xC0, 0x0F, 0xE0, - 0x00, 0x00, 0xFF, 0xC0, 0x7F, 0x80, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0x00, - 0x00, 0x03, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xF0, 0x00, - 0x00, 0x0F, 0xBF, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0x1F, 0xFE, 0x00, 0x00, - 0x00, 0x3E, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, - 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC3, 0xFE, 0x00, - 0x00, 0x00, 0x0F, 0x9F, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0x80, - 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0x80, - 0x00, 0x00, 0xFF, 0xF1, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0x80, 0x7F, 0x80, - 0x00, 0x03, 0xFC, 0x00, 0x7F, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x7F, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, - 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7C, 0x00, 0x01, 0xF8, 0x00, - 0x00, 0xF8, 0x00, 0x03, 0xF0, 0x00, 0x01, 0xF0, 0x00, 0x07, 0xE0, 0x00, - 0x03, 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x00, 0x00, - 0x0F, 0xC0, 0x00, 0x7E, 0x00, 0x00, 0x1F, 0xC0, 0x01, 0xFC, 0x00, 0x00, - 0x3F, 0xC0, 0x03, 0xF0, 0x00, 0x00, 0x7F, 0xC0, 0x1F, 0xE0, 0x00, 0x00, - 0xFF, 0xE0, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, - 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x0F, - 0xBF, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x3E, - 0x03, 0x80, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, - 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xC0, - 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xFF, 0x8F, 0xFF, 0xF8, 0x00, 0x00, - 0x7F, 0xF8, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x7F, - 0xF0, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x07, 0xFC, 0x00, 0x1F, 0xF0, 0x00, - 0x00, 0x00, 0x7F, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x03, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xFC, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, - 0x7F, 0xF0, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0xFF, 0xFE, - 0x00, 0x01, 0xF8, 0x00, 0x0F, 0xFF, 0xFF, 0xC0, 0x00, 0x7E, 0x00, 0x07, - 0xFC, 0x0F, 0xF0, 0x00, 0x1F, 0x80, 0x01, 0xFC, 0x00, 0xFE, 0x00, 0x07, - 0xE0, 0x00, 0xFE, 0x00, 0x1F, 0xC0, 0x01, 0xF0, 0x00, 0x3F, 0x00, 0x03, - 0xF0, 0x00, 0x7C, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x1F, 0x00, 0x07, - 0xE0, 0x00, 0x1F, 0x80, 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x07, 0xE0, 0xFB, - 0xF0, 0x00, 0x7E, 0x00, 0x01, 0xFF, 0xFF, 0xFC, 0x00, 0x1F, 0x80, 0x00, - 0x7F, 0xFF, 0xFF, 0x00, 0x07, 0xE0, 0x00, 0x1F, 0xFF, 0xF7, 0xC0, 0x01, - 0xF8, 0x00, 0x07, 0xFF, 0xFD, 0xF0, 0x00, 0x3E, 0x00, 0x03, 0xFF, 0xFF, - 0x7C, 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x0F, 0xDF, 0x80, 0x03, 0xF0, 0x00, - 0x7F, 0x03, 0xF7, 0xE0, 0x00, 0x7E, 0x00, 0x3F, 0x80, 0xFD, 0xF8, 0x00, - 0x1F, 0xE0, 0x1F, 0xE0, 0x3F, 0x3E, 0x00, 0x03, 0xFF, 0x3F, 0xF0, 0x0F, - 0xCF, 0xC0, 0x00, 0x7F, 0xFF, 0xF8, 0x03, 0xF3, 0xF0, 0x00, 0x0F, 0xFF, - 0xFC, 0x00, 0xFC, 0x7E, 0x00, 0x01, 0xFF, 0xFE, 0x00, 0x3F, 0x1F, 0x80, - 0x00, 0x3F, 0xFE, 0x00, 0x0F, 0xC7, 0xF0, 0x00, 0x01, 0xFE, 0x00, 0x03, - 0xF0, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, - 0xFC, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0xFE, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0x80, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x03, - 0xFC, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x1F, - 0xF0, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x01, 0xFF, 0xE0, - 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x1F, 0xFF, 0xC0, 0xFF, 0xFE, 0x00, 0x00, - 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFE, - 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x19, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xE0, - 0x00, 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x80, - 0x00, 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFE, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, - 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x80, 0x00, - 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, - 0x00, 0x01, 0xFF, 0xC0, 0x00, 0xFF, 0x00, 0x03, 0xFF, 0x80, 0x0F, 0xFF, - 0xC0, 0x07, 0xFF, 0x00, 0x3F, 0xFF, 0xC0, 0x0F, 0xFE, 0x00, 0xFF, 0xFF, - 0xC0, 0x1F, 0xFC, 0x03, 0xFF, 0xFF, 0xC0, 0x3F, 0xF8, 0x0F, 0xFF, 0xFF, - 0xC0, 0x7F, 0xF0, 0x3F, 0xC0, 0x3F, 0xC0, 0xFF, 0xE0, 0x7F, 0x00, 0x3F, - 0x81, 0xFF, 0xC1, 0xFC, 0x00, 0x3F, 0x83, 0xFF, 0x83, 0xF0, 0x00, 0x3F, - 0x07, 0xFF, 0x0F, 0xC0, 0x00, 0x3F, 0x0F, 0xFF, 0xFF, 0x80, 0x00, 0x7F, - 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x01, 0xFF, - 0xFF, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x07, 0xFF, - 0xFF, 0xFF, 0xF0, 0x00, 0x0F, 0xFF, 0xFF, 0x83, 0xF0, 0x00, 0x3F, 0x87, - 0xFF, 0x07, 0xE0, 0x00, 0x7E, 0x0F, 0xFE, 0x07, 0xE0, 0x01, 0xFC, 0x1F, - 0xFC, 0x0F, 0xE0, 0x07, 0xF0, 0x3F, 0xF8, 0x0F, 0xF0, 0x3F, 0xE0, 0x7F, - 0xF0, 0x1F, 0xFF, 0xFF, 0x80, 0xFF, 0xE0, 0x1F, 0xFF, 0xFE, 0x01, 0xFF, - 0xC0, 0x1F, 0xFF, 0xF8, 0x03, 0xFF, 0x80, 0x0F, 0xFF, 0xE0, 0x07, 0xFF, - 0x00, 0x07, 0xFF, 0x00, 0x0F, 0xFE, 0x00, 0x01, 0xE0, 0x00, 0x1F, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xC0, - 0x00, 0x00, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x00, - 0x00, 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, - 0x00, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x3E, 0x70, 0x00, 0x00, 0x00, 0x00, 0x38, 0x23, 0xEF, 0xBF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x70, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, - 0xF0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x1F, - 0xF8, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x80, 0x00, 0x00, - 0x03, 0xF8, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x01, 0xFC, 0x00, - 0x00, 0x00, 0x7E, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x03, - 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0x00, - 0x00, 0x1F, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x03, 0xF0, - 0x00, 0x00, 0x01, 0xF8, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x03, 0xF0, 0x00, - 0xFE, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x1F, - 0xF0, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFE, 0x00, 0x00, 0x00, - 0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, - 0x00, 0x00, 0x01, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xC0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x0F, - 0x80, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x0F, 0xE0, - 0x00, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x03, - 0xFC, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x0F, 0xF0, 0x00, - 0x00, 0xFF, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x3F, - 0xF0, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFE, 0x00, 0x00, - 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, - 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x20, 0x00, - 0x00, 0x00, 0x80, 0x01, 0xF0, 0x00, 0x00, 0x3F, 0xF8, 0x03, 0xE0, 0x00, - 0x01, 0xFF, 0xFC, 0x07, 0xC0, 0x00, 0x07, 0xFF, 0xFC, 0x0F, 0x80, 0x00, - 0x1F, 0xFF, 0xFE, 0x1F, 0x00, 0x00, 0x7F, 0xFF, 0xFC, 0x3E, 0x00, 0x01, - 0xFF, 0x87, 0xFC, 0x7C, 0x00, 0x07, 0xF8, 0x03, 0xFC, 0xF8, 0x00, 0x0F, - 0xE0, 0x03, 0xF9, 0xF0, 0x00, 0x1F, 0x80, 0x03, 0xFB, 0xE0, 0x00, 0x7E, - 0x00, 0x03, 0xF7, 0xC0, 0x01, 0xFC, 0x00, 0x07, 0xEF, 0x80, 0x07, 0xF8, - 0x00, 0x07, 0xDF, 0x00, 0x1F, 0xE0, 0x00, 0x0F, 0xFE, 0x00, 0x7F, 0xC0, - 0x00, 0x1F, 0xFC, 0x01, 0xFF, 0xC0, 0x00, 0x3F, 0xF8, 0x07, 0xFF, 0x80, - 0x00, 0x7D, 0xF0, 0x3F, 0xFF, 0x00, 0x01, 0xFB, 0xE0, 0xFF, 0xFF, 0x00, - 0x03, 0xF7, 0xC3, 0xFE, 0x7E, 0x00, 0x0F, 0xEF, 0x8F, 0xFC, 0xFE, 0x00, - 0x3F, 0x9F, 0x3F, 0xFC, 0xFE, 0x00, 0xFF, 0x3E, 0xFF, 0xFD, 0xFF, 0x87, - 0xFC, 0x7F, 0xFF, 0xF9, 0xFF, 0xFF, 0xF0, 0xFF, 0xF3, 0xF9, 0xFF, 0xFF, - 0xC1, 0xFF, 0xC3, 0xF9, 0xFF, 0xFF, 0x03, 0xFF, 0x07, 0xF1, 0xFF, 0xFC, - 0x07, 0xFC, 0x07, 0xF0, 0x7F, 0xE0, 0x0F, 0xE0, 0x07, 0xF0, 0x00, 0x00, - 0x1F, 0x80, 0x07, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x0F, 0xE0, 0x00, 0x00, - 0x7C, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0xF8, 0x00, 0x0F, 0xE0, 0x00, 0x01, - 0xF0, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xE0, 0x00, 0x1F, 0xC0, 0x00, 0x07, - 0xC0, 0x00, 0x1F, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x3F, 0x80, 0x00, 0x1F, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0x3E, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x7C, - 0x00, 0x00, 0x3F, 0x80, 0x00, 0xF8, 0x00, 0x00, 0x7F, 0x00, 0x01, 0xF0, - 0x00, 0x00, 0x7F, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x07, 0xC0, - 0x00, 0x00, 0xFE, 0x00, 0x0F, 0x80, 0x00, 0x00, 0xFE, 0x00, 0x1F, 0x00, - 0x00, 0x00, 0xFE, 0x00, 0x3E, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x7C, 0x00, - 0x00, 0x01, 0xFC, 0x00, 0xF8, 0x00, 0x00, 0x01, 0xFC, 0x01, 0xF0, 0x00, - 0x00, 0x01, 0xFC, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xF8, 0x07, 0xC0, 0x00, - 0x00, 0x03, 0xF8, 0x0F, 0x80, 0x00, 0x00, 0x03, 0xF8, 0x1F, 0x00, 0x00, - 0x00, 0x07, 0xF0, 0x3E, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x7C, 0x00, 0x00, - 0x00, 0x07, 0xF0, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xE1, 0xF0, 0x00, 0x00, - 0x00, 0x0F, 0xE3, 0xE0, 0x00, 0x00, 0x00, 0x0F, 0xE7, 0xC0, 0x00, 0x00, - 0x00, 0x0F, 0xEF, 0x80, 0x00, 0x00, 0x00, 0x1F, 0xDF, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x3E, 0x70, 0x00, 0x00, 0x00, 0x00, 0x38, 0x20, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, - 0x00, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xF0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, - 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0E, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xC0, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFB, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0xDF, 0xF9, 0xFE, 0x00, 0x0F, 0xF0, 0x00, 0x3F, 0x9F, 0xF8, 0xFF, - 0x00, 0x3F, 0xFE, 0x00, 0x7F, 0x1F, 0xF8, 0x7F, 0x80, 0xFF, 0xFF, 0x00, - 0xFE, 0x1F, 0xF8, 0x3F, 0xC1, 0xFF, 0xFF, 0x81, 0xFC, 0x1F, 0xF8, 0x1F, - 0xE3, 0xFF, 0xFF, 0xC7, 0xF8, 0x1F, 0xF8, 0x0F, 0xF7, 0xFC, 0x1F, 0xEF, - 0xF0, 0x1F, 0xF8, 0x07, 0xFF, 0xF0, 0x07, 0xFF, 0xE0, 0x1F, 0xF8, 0x03, - 0xFF, 0xC0, 0x03, 0xFF, 0xC0, 0x1F, 0xF8, 0x01, 0xFF, 0xC0, 0x01, 0xFF, - 0x80, 0x1F, 0xF8, 0x00, 0xFF, 0x80, 0x00, 0xFF, 0x00, 0x1F, 0xF8, 0x00, - 0x7F, 0x00, 0x00, 0xFE, 0x00, 0x1F, 0xF8, 0x00, 0x3F, 0x00, 0x00, 0xFC, - 0x00, 0x1F, 0xF8, 0x00, 0x3F, 0x00, 0x00, 0x7C, 0x00, 0x1F, 0xF8, 0x00, - 0x3F, 0x00, 0x00, 0x7C, 0x00, 0x1F, 0xF8, 0x00, 0x3F, 0x00, 0x00, 0xFC, - 0x00, 0x1F, 0xF8, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x1F, 0xF8, 0x00, - 0x3F, 0x80, 0x00, 0xF8, 0x00, 0x1F, 0xF8, 0x00, 0x1F, 0x80, 0x01, 0xF8, - 0x00, 0x1F, 0xF8, 0x00, 0x1F, 0xC0, 0x01, 0xF8, 0x00, 0x1F, 0xF8, 0x00, - 0x1F, 0xE0, 0x03, 0xF0, 0x00, 0x1F, 0xF8, 0x00, 0x0F, 0xF0, 0x0F, 0xF0, - 0x00, 0x1F, 0xF8, 0x00, 0x0F, 0xFF, 0xFF, 0xE0, 0x00, 0x1F, 0xF8, 0x00, - 0x07, 0xFF, 0xFF, 0xE0, 0x00, 0x1F, 0xF8, 0x00, 0x03, 0xFF, 0xFF, 0xC0, - 0x00, 0x1F, 0xF8, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x1F, 0xF8, 0x00, - 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xF8, 0x00, - 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x1F, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x70, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x30, 0x00, 0x00, 0x00, 0x00, 0x11, - 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xF7, - 0xE0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x07, 0xFF, - 0xE0, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x1F, 0xFF, - 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0xFF, - 0xC0, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x01, 0xFF, 0xFF, - 0x80, 0x00, 0x00, 0x03, 0xFF, 0xBF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0x7F, - 0x00, 0x00, 0x00, 0x0F, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x7F, - 0x00, 0x00, 0x00, 0x3F, 0xF8, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xF0, 0xFE, - 0x00, 0x00, 0x00, 0xFF, 0xE0, 0xFE, 0x00, 0x00, 0x01, 0xFF, 0xC1, 0xFE, - 0x00, 0x00, 0x03, 0xFF, 0x81, 0xFC, 0x00, 0x00, 0x07, 0xFF, 0x01, 0xFC, - 0x00, 0x00, 0x0F, 0xFE, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xFC, 0x03, 0xF8, - 0x00, 0x00, 0x3F, 0xF8, 0x03, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x03, 0xF8, - 0x00, 0x00, 0xFF, 0xE0, 0x07, 0xF0, 0x00, 0x01, 0xFF, 0xC0, 0x07, 0xF0, - 0x00, 0x03, 0xFF, 0x80, 0x07, 0xF0, 0x00, 0x07, 0xFF, 0x00, 0x0F, 0xF0, - 0x00, 0x0F, 0xFE, 0x00, 0x0F, 0xE0, 0x00, 0x1F, 0xFC, 0x00, 0x0F, 0xE0, - 0x00, 0x3F, 0xF8, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0xF0, 0x00, 0x1F, 0xC0, - 0x00, 0xFF, 0xE0, 0x00, 0x1F, 0xC0, 0x01, 0xFF, 0xC0, 0x00, 0x1F, 0xC0, - 0x03, 0xFF, 0x80, 0x00, 0x3F, 0x80, 0x07, 0xFF, 0x00, 0x00, 0x3F, 0x80, - 0x0F, 0xFE, 0x00, 0x00, 0x3F, 0x80, 0x1F, 0xFC, 0x00, 0x00, 0x7F, 0x80, - 0x3F, 0xF8, 0x00, 0x00, 0x7F, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x7F, 0x00, - 0xFF, 0xE0, 0x00, 0x00, 0x7F, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0xFE, 0x03, - 0xFF, 0x80, 0x00, 0x00, 0xFE, 0x07, 0xFF, 0x00, 0x00, 0x00, 0xFE, 0x0F, - 0xFE, 0x00, 0x00, 0x01, 0xFC, 0x1F, 0xFC, 0x00, 0x00, 0x01, 0xFC, 0x3F, - 0xF8, 0x00, 0x00, 0x01, 0xFC, 0x7F, 0xF0, 0x00, 0x00, 0x03, 0xFC, 0xFF, - 0xE0, 0x00, 0x00, 0x03, 0xF9, 0xFF, 0xC0, 0x00, 0x00, 0x03, 0xFB, 0xFF, - 0x80, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFE, - 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xF8, - 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xE0, - 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x80, - 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x70, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, - 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, - 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x03, 0xFF, 0xFE, - 0x7F, 0xFF, 0xE0, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x01, 0xFF, 0xF0, 0x00, - 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, - 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x03, 0xFE, 0x00, - 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x01, 0xFE, 0x00, 0x00, - 0x00, 0x00, 0x7F, 0x80, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, - 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x07, 0xF0, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xE0, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, - 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x1F, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xF8, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, - 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, - 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x7C, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, - 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7E, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, - 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, - 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x0F, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xF0, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, - 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x03, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xE0, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, - 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0xFF, 0x00, 0x00, - 0x00, 0x00, 0xFF, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x03, 0xFE, 0x00, - 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x1F, 0xFC, 0x00, - 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x01, 0xFF, 0xF0, 0x00, - 0x00, 0x03, 0xFF, 0xFE, 0x7F, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFE, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, - 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, - 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x7F, - 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, - 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x01, 0xF8, 0x00, 0x00, - 0x7F, 0xFC, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x1F, - 0x80, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x01, 0xFE, - 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x7E, 0x00, 0x00, - 0x00, 0x07, 0xF8, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x07, - 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x03, - 0xF0, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x1F, 0x80, 0x00, - 0x00, 0x00, 0x1F, 0x80, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x01, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0xFF, 0xFF, 0x00, - 0x00, 0x00, 0x03, 0xF0, 0x7F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0xFC, 0x3F, - 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x1F, 0xF9, 0xFF, 0x80, 0x00, 0x00, - 0x0F, 0xCF, 0xF0, 0x0F, 0xF0, 0x00, 0x00, 0x03, 0xF3, 0xF8, 0x00, 0xFC, - 0x00, 0x00, 0x00, 0xFD, 0xFC, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x3F, 0x7E, - 0x00, 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0xFC, 0x00, 0x00, - 0x03, 0xFF, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x01, 0xFB, 0xF0, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x7E, 0xFC, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x3F, 0xBF, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xCF, 0xC0, 0x00, 0x3F, 0x00, 0x00, - 0x07, 0xF3, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x03, 0xF8, 0x7E, 0x00, 0x03, - 0xE0, 0x00, 0x01, 0xFE, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x00, 0xFF, 0x07, - 0xF0, 0x00, 0xFE, 0x00, 0x00, 0x7F, 0x80, 0xFE, 0x00, 0x7F, 0x00, 0x00, - 0x7F, 0xC0, 0x3F, 0xE0, 0x7F, 0xF0, 0x00, 0x7F, 0xF0, 0x07, 0xFF, 0xFF, - 0xFF, 0xC1, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, - 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xFD, 0xFF, 0xFF, - 0xFC, 0x00, 0x00, 0x3F, 0xFC, 0x0F, 0xFF, 0xFC, 0x00, 0x00, 0x01, 0xF8, - 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, - 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0x80, 0x00, - 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0xFF, - 0x00, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x07, 0xFF, 0x00, - 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x7F, 0xC0, - 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x03, 0xFC, - 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0x80, - 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x07, - 0xF0, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x3F, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0x80, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x0F, 0xC0, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xF8, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x03, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0F, 0x81, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0xFC, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x7C, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xF8, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x3F, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x1F, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0x8F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC7, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE3, 0xE0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xF1, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x7E, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x7E, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x87, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0F, 0x83, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xC1, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xE0, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0xFF, 0xF0, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, - 0xF0, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFC, 0x0F, 0xC0, 0x00, - 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x1F, 0xF0, - 0x7F, 0x81, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x0F, 0xE0, 0x7E, 0x00, - 0x00, 0x00, 0x0F, 0xE0, 0x03, 0xF0, 0x3F, 0x80, 0x00, 0x00, 0x07, 0xE0, - 0x00, 0xFC, 0x0F, 0xE0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x7E, 0x03, 0xF8, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x01, 0xFE, 0x00, 0x00, 0x01, 0xF8, - 0x00, 0x0F, 0x80, 0x7F, 0x80, 0x00, 0x00, 0xF8, 0x00, 0x07, 0xC0, 0x1F, - 0xE0, 0x00, 0x00, 0x7C, 0x00, 0x03, 0xE0, 0x07, 0xFC, 0x00, 0x00, 0x3F, - 0x00, 0x01, 0xF0, 0x01, 0xFF, 0x80, 0x00, 0x1F, 0x80, 0x00, 0xF8, 0x00, - 0x7F, 0xF0, 0x00, 0x07, 0xC0, 0x00, 0xFC, 0x00, 0x1F, 0xFF, 0x00, 0x1F, - 0xF0, 0x00, 0xFE, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x7E, 0x00, - 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x1F, 0xFF, 0xFF, - 0xFF, 0xF1, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, - 0x00, 0x00, 0x1F, 0xFF, 0xE3, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x3C, - 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, - 0xF0, 0x00, 0x78, 0x00, 0x01, 0xFF, 0xFE, 0x00, 0xFC, 0x00, 0x07, 0xFF, - 0xFF, 0x00, 0xFE, 0x00, 0x0F, 0xFF, 0xFF, 0xC0, 0xFE, 0x00, 0x1F, 0xFF, - 0xFF, 0xE0, 0xFF, 0x00, 0x3F, 0xFD, 0xFF, 0xF0, 0xFF, 0x80, 0x7F, 0x80, - 0x1F, 0xF0, 0xFF, 0x80, 0xFF, 0x00, 0x07, 0xF8, 0xFF, 0xC1, 0xFC, 0x00, - 0x03, 0xFC, 0xFF, 0xE1, 0xF8, 0x00, 0x01, 0xFC, 0xFF, 0xF3, 0xF8, 0x00, - 0x00, 0xFE, 0xFF, 0xF3, 0xF0, 0x00, 0x00, 0x7E, 0xFF, 0xFB, 0xE0, 0x00, - 0x00, 0x7E, 0xFD, 0xFF, 0xE0, 0x00, 0x00, 0x3F, 0xFC, 0xFF, 0xE0, 0x00, - 0x00, 0x3F, 0xFC, 0xFF, 0xE0, 0x00, 0x00, 0x3F, 0xFC, 0x7F, 0xC0, 0x00, - 0x00, 0x3F, 0xFC, 0x3F, 0xC0, 0x00, 0x00, 0x3F, 0xFC, 0x3F, 0xE0, 0x00, - 0x00, 0x3F, 0xFC, 0x1F, 0xE0, 0x00, 0x00, 0x3F, 0xFC, 0x0F, 0xE0, 0x00, - 0x00, 0x3F, 0xFC, 0x07, 0xE0, 0x00, 0x00, 0x3F, 0xFC, 0x07, 0xF0, 0x00, - 0x00, 0x7E, 0xFC, 0x03, 0xF8, 0x00, 0x00, 0x7E, 0xFC, 0x01, 0xF8, 0x00, - 0x00, 0xFE, 0xFC, 0x01, 0xFC, 0x00, 0x01, 0xFC, 0xFC, 0x00, 0xFE, 0x00, - 0x03, 0xFC, 0xFC, 0x00, 0x7F, 0x80, 0x07, 0xF8, 0xFC, 0x00, 0x7F, 0xE0, - 0x3F, 0xF0, 0xFC, 0x00, 0x3F, 0xFF, 0xFF, 0xE0, 0xFC, 0x00, 0x1F, 0xFF, - 0xFF, 0xC0, 0xFC, 0x00, 0x0F, 0xFF, 0xFF, 0x80, 0xFC, 0x00, 0x0F, 0xFF, - 0xFE, 0x00, 0xFC, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0xFC, 0x00, 0x03, 0xFF, - 0x80, 0x00, 0xFC, 0x00, 0x03, 0xF8, 0x00, 0x00, 0xFC, 0x00, 0x01, 0xFC, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0xFC, 0x00, 0x00, 0x7F, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x3F, - 0x80, 0x00, 0xFC, 0x00, 0x00, 0x1F, 0x80, 0x00, 0xFC, 0x00, 0x00, 0x1F, - 0xC0, 0x00, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0xFC, 0x00, 0x00, 0x07, - 0xF0, 0x00, 0xFC, 0x00, 0x00, 0x07, 0xF0, 0x00, 0xFC, 0x00, 0x00, 0x03, - 0xF8, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xFC, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFE, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0x7F, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0x3F, 0x80, 0xFC, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0xFC, 0x00, 0x00, 0x00, - 0x0F, 0xE0, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0xFC, 0x00, 0x00, 0x00, - 0x07, 0xF0, 0xFC, 0x00, 0x00, 0x00, 0x03, 0xF8, 0xFC, 0x00, 0x00, 0x00, - 0x01, 0xF8, 0xFC, 0x00, 0x00, 0x00, 0x01, 0xFC, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0xFC, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x7C, 0x00, 0x00, 0x00, - 0x00, 0x7C, 0x78, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x1F, 0xE0, - 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xF0, - 0x00, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xE0, - 0x00, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x00, 0x07, - 0xFF, 0x80, 0x1F, 0x80, 0x00, 0x1F, 0xFF, 0xE0, 0x0F, 0x80, 0x00, 0x3F, - 0xFF, 0xF0, 0x0F, 0xC0, 0x00, 0x7F, 0xFF, 0xF8, 0x0F, 0xC0, 0x00, 0xFF, - 0xFF, 0xFC, 0x07, 0xE0, 0x00, 0xFF, 0x03, 0xFC, 0x07, 0xF0, 0x01, 0xFC, - 0x00, 0xFE, 0x03, 0xF8, 0x01, 0xF8, 0x00, 0x7E, 0x01, 0xFC, 0x03, 0xF0, - 0x00, 0x3F, 0x01, 0xFE, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0xFF, 0x03, 0xE0, - 0x00, 0x3F, 0x00, 0x7F, 0xC3, 0xE0, 0x00, 0x1F, 0x00, 0x3F, 0xFF, 0xE0, - 0x00, 0x1F, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0x1F, 0x00, 0x0F, 0xFF, 0xE0, - 0x00, 0x3F, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x3F, 0x00, 0x00, 0xFF, 0xF0, - 0x00, 0x3E, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x7E, 0x00, 0x00, 0x01, 0xFC, - 0x00, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x01, 0xFC, 0x00, 0x00, 0x00, 0xFF, - 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xF0, 0x10, 0x00, 0x00, 0x3F, - 0xFF, 0xE0, 0x78, 0x00, 0x00, 0x0F, 0xFF, 0xC0, 0xFC, 0x00, 0x00, 0x07, - 0xFF, 0x80, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x7E, 0x00, 0x00, 0x00, - 0x7F, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x3F, 0x80, 0x00, 0x01, - 0xFC, 0x00, 0x1F, 0xC0, 0x00, 0x03, 0xFC, 0x00, 0x0F, 0xF0, 0x00, 0x0F, - 0xF8, 0x00, 0x07, 0xFC, 0x00, 0x3F, 0xF0, 0x00, 0x03, 0xFF, 0xC3, 0xFF, - 0xE0, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, - 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFC, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x9F, 0xF8, 0xFF, 0xFF, 0xFF, 0xF9, 0xFE, 0x01, 0xFF, 0xFF, 0xFF, 0x8F, - 0xE0, 0x03, 0xF8, 0x00, 0x00, 0xFE, 0x00, 0x0F, 0xC0, 0x00, 0x07, 0xE0, - 0x00, 0x7E, 0x00, 0x00, 0x3F, 0x00, 0x01, 0xF0, 0x00, 0x01, 0xF0, 0x00, - 0x0F, 0xC0, 0x00, 0x0F, 0x80, 0x00, 0x7E, 0x00, 0x00, 0x7C, 0x00, 0x03, - 0xF0, 0x00, 0x03, 0xE0, 0x00, 0x1F, 0x80, 0x00, 0x1F, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0xFC, 0x00, 0x07, 0xC0, 0x00, 0x07, 0xE0, 0x00, 0x7E, 0x00, - 0x00, 0x1F, 0x80, 0x07, 0xF0, 0x00, 0x00, 0xFE, 0x00, 0x7F, 0x00, 0x00, - 0x03, 0xFC, 0x07, 0xF8, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0x80, 0x00, 0x00, - 0x7F, 0xFF, 0xF8, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x07, - 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x7E, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, - 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, - 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, - 0x00, 0x3D, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xF0, 0x00, 0x00, 0x00, - 0x01, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x00, - 0x07, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x7F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x01, - 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x07, - 0xFF, 0x80, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, - 0xFE, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, - 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFF, - 0xE0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x07, 0xFF, - 0x80, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF8, - 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xE0, - 0x00, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x80, - 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xE0, 0x00, - 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00, - 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, - 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xF7, 0xE0, 0x00, 0x00, - 0x00, 0x03, 0xEF, 0xC0, 0x00, 0x00, 0x00, 0x0F, 0xDF, 0x80, 0x00, 0x00, - 0x00, 0x1F, 0x9F, 0x80, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, - 0x00, 0xFE, 0x7E, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x7E, 0x00, 0x00, 0x00, - 0x07, 0xF0, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0xFC, 0x00, 0x00, 0x00, - 0x3F, 0x81, 0xFC, 0x00, 0x00, 0x00, 0xFE, 0x01, 0xFC, 0x00, 0x00, 0x03, - 0xFC, 0x03, 0xFC, 0x00, 0x00, 0x0F, 0xF0, 0x03, 0xFE, 0x00, 0x00, 0x3F, - 0xC0, 0x03, 0xFE, 0x00, 0x01, 0xFF, 0x00, 0x03, 0xFF, 0x80, 0x0F, 0xFC, - 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xC0, - 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF8, 0x00, - 0x00, 0x00, 0x7F, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFB, - 0xE0, 0x00, 0x00, 0x00, 0x01, 0xF7, 0xE0, 0x00, 0x00, 0x00, 0x07, 0xEF, - 0xC0, 0x00, 0x00, 0x00, 0x0F, 0xDF, 0x80, 0x00, 0x00, 0x00, 0x1F, 0x9F, - 0x80, 0x00, 0x00, 0x00, 0x7E, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x7E, - 0x00, 0x00, 0x00, 0x01, 0xF8, 0x7E, 0x00, 0x00, 0x00, 0x07, 0xE0, 0xFC, - 0x00, 0x00, 0x00, 0x0F, 0xC1, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0x81, 0xF8, - 0x00, 0x00, 0x00, 0x7E, 0x03, 0xF0, 0x00, 0x00, 0x00, 0xFC, 0x07, 0xF0, - 0x00, 0x00, 0x01, 0xF8, 0x07, 0xE0, 0x00, 0x00, 0x07, 0xE0, 0x0F, 0xC0, - 0x00, 0x00, 0x0F, 0xC0, 0x0F, 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x1F, 0x80, - 0x00, 0x00, 0x7E, 0x00, 0x3F, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x3F, 0x00, - 0x00, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x00, 0x07, 0xE0, 0x00, 0xFC, 0x00, - 0x00, 0x0F, 0xC0, 0x00, 0xFC, 0x00, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, - 0x00, 0x7E, 0x00, 0x03, 0xF0, 0x00, 0x00, 0xFC, 0x00, 0x03, 0xF0, 0x00, - 0x03, 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x07, 0xE0, 0x00, 0x0F, 0xC0, 0x00, - 0x0F, 0xC0, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x80, 0x00, 0x1F, 0x80, 0x00, - 0x7E, 0x00, 0x00, 0x3F, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x03, - 0xF8, 0x00, 0x00, 0x7E, 0x00, 0x07, 0xE0, 0x00, 0x00, 0xFC, 0x00, 0x0F, - 0xC0, 0x00, 0x00, 0xFC, 0x00, 0x3F, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x7E, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0xFC, 0x00, 0x00, 0x03, 0xF0, 0x03, 0xF0, - 0x00, 0x00, 0x07, 0xE0, 0x07, 0xE0, 0x00, 0x00, 0x0F, 0xC0, 0x0F, 0xC0, - 0x00, 0x00, 0x0F, 0xC0, 0x3F, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x7E, 0x00, - 0x00, 0x00, 0x1F, 0x80, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x03, 0xF0, 0x00, - 0x00, 0x00, 0x7E, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x7E, 0x0F, 0xC0, 0x00, - 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x7E, 0x00, 0x00, - 0x00, 0x01, 0xF9, 0xFC, 0x00, 0x00, 0x00, 0x03, 0xF3, 0xF0, 0x00, 0x00, - 0x00, 0x07, 0xE7, 0xE0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, - 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x1E, 0x00, 0x00, 0x1C, - 0x00, 0x0F, 0xBE, 0x00, 0x0F, 0x80, 0x00, 0x1F, 0x00, 0x07, 0xDF, 0x80, - 0x07, 0xC0, 0x00, 0x0F, 0x80, 0x07, 0xEF, 0xC0, 0x03, 0xF0, 0x00, 0x0F, - 0xC0, 0x03, 0xF7, 0xE0, 0x01, 0xF8, 0x00, 0x07, 0xE0, 0x01, 0xF9, 0xF8, - 0x00, 0xFC, 0x00, 0x07, 0xE0, 0x01, 0xF8, 0xFC, 0x00, 0x3F, 0x00, 0x03, - 0xF0, 0x00, 0xFC, 0x7E, 0x00, 0x1F, 0x80, 0x01, 0xF8, 0x00, 0x7E, 0x1F, - 0x80, 0x0F, 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x0F, 0xC0, 0x03, 0xF0, 0x00, - 0xFC, 0x00, 0x3F, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x3F, 0x81, - 0xF8, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0xFC, 0x00, 0x3F, 0x00, - 0x3F, 0x00, 0x0F, 0xC0, 0x7E, 0x00, 0x1F, 0x80, 0x1F, 0x80, 0x0F, 0xE0, - 0x1F, 0x80, 0x07, 0xE0, 0x1F, 0x80, 0x07, 0xE0, 0x0F, 0xC0, 0x03, 0xF0, - 0x0F, 0xC0, 0x03, 0xF0, 0x07, 0xE0, 0x01, 0xF8, 0x07, 0xE0, 0x03, 0xF8, - 0x01, 0xF8, 0x00, 0x7E, 0x07, 0xE0, 0x01, 0xF8, 0x00, 0xFC, 0x00, 0x3F, - 0xFF, 0xF0, 0x00, 0xFC, 0x00, 0x7F, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0xFE, - 0x00, 0x1F, 0x80, 0x07, 0xFF, 0xF8, 0x00, 0x7E, 0x00, 0x0F, 0xC0, 0x07, - 0xFF, 0xFE, 0x00, 0x3F, 0x00, 0x03, 0xF0, 0x07, 0xFF, 0xFF, 0x80, 0x3F, - 0x80, 0x01, 0xF8, 0x07, 0xFF, 0xFF, 0xE0, 0x1F, 0x80, 0x00, 0xFC, 0x07, - 0xF8, 0x07, 0xF8, 0x0F, 0xC0, 0x00, 0x3F, 0x03, 0xF8, 0x01, 0xFC, 0x0F, - 0xC0, 0x00, 0x1F, 0x83, 0xF8, 0x00, 0x7F, 0x07, 0xE0, 0x00, 0x0F, 0xC1, - 0xF8, 0x00, 0x1F, 0x83, 0xF0, 0x00, 0x03, 0xF0, 0xFC, 0x00, 0x0F, 0xC3, - 0xF0, 0x00, 0x01, 0xF8, 0xFC, 0x00, 0x03, 0xF1, 0xF8, 0x00, 0x00, 0xFC, - 0x7E, 0x00, 0x01, 0xF8, 0xFC, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0xFC, - 0xFC, 0x00, 0x00, 0x1F, 0x9F, 0x80, 0x00, 0x7E, 0x7E, 0x00, 0x00, 0x0F, - 0xCF, 0xC0, 0x00, 0x3F, 0x7F, 0x00, 0x00, 0x03, 0xF3, 0xE0, 0x00, 0x1F, - 0xBF, 0x00, 0x00, 0x01, 0xF9, 0xF8, 0x00, 0x1F, 0x9F, 0x80, 0x00, 0x00, - 0xFC, 0xFE, 0x00, 0x1F, 0xDF, 0xC0, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x0F, - 0xEF, 0xC0, 0x00, 0x00, 0x1F, 0x9F, 0xE0, 0x1F, 0xE7, 0xE0, 0x00, 0x00, - 0x0F, 0xC7, 0xFC, 0x3F, 0xE7, 0xF0, 0x00, 0x00, 0x03, 0xF1, 0xFF, 0xFF, - 0xF3, 0xF0, 0x00, 0x00, 0x01, 0xF8, 0x7F, 0xFF, 0xF1, 0xF8, 0x00, 0x00, - 0x00, 0xFC, 0x1F, 0xFF, 0xF1, 0xFC, 0x00, 0x00, 0x00, 0x3F, 0x07, 0xFF, - 0xE0, 0xFC, 0x00, 0x00, 0x00, 0x1F, 0x81, 0xFF, 0xE0, 0x7E, 0x00, 0x00, - 0x00, 0x0F, 0xE0, 0xFF, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x03, 0xF0, 0xFC, - 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x7E, 0x7E, 0x1F, 0x80, 0x00, - 0x00, 0x00, 0x7E, 0x7F, 0x1F, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0x3F, - 0x0F, 0xCF, 0xC0, 0x00, 0x00, 0x00, 0x1F, 0x9F, 0x87, 0xE7, 0xE0, 0x00, - 0x00, 0x00, 0x07, 0xFF, 0xC1, 0xF7, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xFF, - 0xC0, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xE0, 0x7F, 0xF8, 0x00, - 0x00, 0x00, 0x00, 0x7F, 0xF0, 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x3F, - 0xF0, 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x07, 0xFE, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xF8, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xFC, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x7F, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x07, 0xE0, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0x00, 0x00, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x11, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7B, 0xF0, - 0x00, 0x00, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xE0, - 0x00, 0x00, 0x00, 0x0F, 0xCF, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0x8F, 0xE0, - 0x00, 0x00, 0x00, 0xFE, 0x1F, 0xC0, 0x00, 0x00, 0x03, 0xF8, 0x1F, 0xC0, - 0x00, 0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x00, 0x00, 0x1F, 0xC0, 0x3F, 0x80, - 0x00, 0x00, 0x7F, 0x00, 0x3F, 0x80, 0x00, 0x00, 0xFE, 0x00, 0x3F, 0x80, - 0x00, 0x03, 0xF8, 0x00, 0x7F, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x7F, 0x00, - 0x00, 0x1F, 0x80, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x00, - 0x01, 0xFC, 0x00, 0x00, 0xFE, 0x00, 0x07, 0xF0, 0x00, 0x00, 0xFE, 0x00, - 0x0F, 0xE0, 0x00, 0x00, 0xFE, 0xFF, 0xBF, 0x80, 0x00, 0x01, 0xFF, 0xFF, - 0xFE, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x01, 0xFF, 0xFF, - 0xF0, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x0F, 0xFF, 0xFF, - 0xE0, 0x00, 0x00, 0x3F, 0xC0, 0x3F, 0xC0, 0x00, 0x00, 0x7F, 0x00, 0x1F, - 0xC0, 0x00, 0x01, 0xFC, 0x00, 0x1F, 0x80, 0x00, 0x03, 0xF0, 0x00, 0x3F, - 0x80, 0x00, 0x07, 0xE0, 0x00, 0x3F, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x7E, - 0x00, 0x00, 0x3F, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xF8, - 0x00, 0x00, 0xFC, 0x00, 0x01, 0xF0, 0x00, 0x01, 0xF8, 0x00, 0x07, 0xE0, - 0x00, 0x01, 0xF0, 0x00, 0x0F, 0xC0, 0x00, 0x03, 0xF0, 0x00, 0x1F, 0x80, - 0x00, 0x07, 0xE0, 0x00, 0x7E, 0x00, 0x00, 0x07, 0xE0, 0x01, 0xFC, 0x00, - 0x00, 0x0F, 0xF0, 0x07, 0xF0, 0x00, 0x00, 0x0F, 0xF0, 0x3F, 0xE0, 0x00, - 0x00, 0x0F, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0x00, 0x00, - 0x00, 0x7F, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0x00, - 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0xE1, 0xFC, 0x00, 0x00, - 0x3F, 0x80, 0x01, 0xFC, 0x00, 0x00, 0x7F, 0x00, 0x01, 0xFC, 0x00, 0x01, - 0xFC, 0x00, 0x01, 0xFC, 0x00, 0x07, 0xF0, 0x00, 0x03, 0xF8, 0x00, 0x0F, - 0xE0, 0x00, 0x03, 0xF8, 0x00, 0x3F, 0x80, 0x00, 0x03, 0xF8, 0x00, 0xFE, - 0x00, 0x00, 0x07, 0xF0, 0x01, 0xFC, 0x00, 0x00, 0x07, 0xF0, 0x07, 0xF0, - 0x00, 0x00, 0x07, 0xF0, 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0xE0, 0x7F, 0x00, - 0x00, 0x00, 0x0F, 0xE0, 0xFE, 0x00, 0x00, 0x00, 0x0F, 0xE3, 0xF8, 0x00, - 0x00, 0x00, 0x0F, 0xEF, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xDF, 0xC0, 0x00, - 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, - 0x00, 0x00, 0x3E, 0x70, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x78, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFD, 0xFC, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xFE, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x8F, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0xC1, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, - 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x07, 0xF8, 0x00, 0x00, 0x00, - 0x07, 0xF8, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x1F, 0xE0, - 0x00, 0x00, 0x01, 0xFE, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0x00, - 0x00, 0x7F, 0x80, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x0F, 0xF0, 0x00, 0x00, - 0x3F, 0xC0, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x3F, - 0xC0, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x07, 0xF8, 0x00, - 0x00, 0x00, 0xFF, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00, 0x1F, 0xEF, 0xF9, - 0xFE, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, - 0x7F, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xC0, 0x00, - 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x87, - 0xFE, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x7F, 0x80, 0x00, 0x00, 0x00, - 0x3F, 0x80, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x01, 0xFC, 0x00, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, - 0x07, 0xE0, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, - 0x1F, 0x80, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x1F, 0x80, - 0x00, 0x00, 0x01, 0xF8, 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x7E, 0x00, - 0x01, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0xFE, 0x00, 0x00, 0x00, - 0x03, 0xF0, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x1F, 0xC0, - 0x00, 0x00, 0x00, 0x1F, 0x80, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x07, 0xF8, - 0x07, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x87, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x1F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x78, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, - 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x80, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, - 0xE0, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x3F, 0xFC, 0x00, - 0x00, 0x07, 0xF0, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x07, 0xF0, 0x00, 0xFF, - 0xFF, 0xE0, 0x00, 0x03, 0xF8, 0x00, 0xFF, 0xFF, 0xF8, 0x00, 0x03, 0xF8, - 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0x03, 0xF8, 0x00, 0x7F, 0x81, 0xFF, 0x00, - 0x01, 0xF8, 0x00, 0x7F, 0x00, 0x3F, 0xC0, 0x01, 0xFC, 0x00, 0x3F, 0x00, - 0x0F, 0xE0, 0x01, 0xFC, 0x00, 0x3F, 0x00, 0x03, 0xF8, 0x01, 0xFC, 0x00, - 0x1F, 0x80, 0x00, 0xFC, 0x00, 0xFE, 0x00, 0x0F, 0x80, 0x00, 0x7E, 0x00, - 0xFE, 0x00, 0x0F, 0xC0, 0x00, 0x3F, 0x00, 0xFE, 0x00, 0x07, 0xE0, 0x00, - 0x0F, 0x80, 0x7F, 0x00, 0x03, 0xF0, 0x00, 0x07, 0xC0, 0x7F, 0x00, 0x01, - 0xF8, 0x00, 0x07, 0xE0, 0x7F, 0x00, 0x00, 0x7C, 0x00, 0x03, 0xF0, 0x3F, - 0x00, 0x00, 0x3F, 0x00, 0x01, 0xF8, 0x3F, 0x80, 0x00, 0x1F, 0x80, 0x01, - 0xFC, 0x3F, 0x80, 0x00, 0x0F, 0xE0, 0x00, 0xFC, 0x3F, 0x80, 0x00, 0x03, - 0xF8, 0x00, 0xFE, 0x1F, 0xC0, 0x00, 0x01, 0xFE, 0x01, 0xFE, 0x1F, 0xFF, - 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x1F, 0xC0, 0x1F, 0xF0, 0x0F, 0xFC, - 0x03, 0xFF, 0x01, 0xFF, 0xC0, 0x7F, 0xF0, 0x1F, 0x80, 0x0F, 0xC0, 0x03, - 0xF0, 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x03, 0xE0, 0x00, 0xF8, - 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x03, 0xE0, 0x00, 0xF8, 0x00, 0x3E, 0x00, - 0x0F, 0x80, 0x03, 0xE0, 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x1F, 0x80, 0x07, - 0xC0, 0x03, 0xF0, 0x03, 0xF8, 0x03, 0xFC, 0x00, 0xFE, 0x00, 0x3E, 0x00, - 0x0F, 0xE0, 0x03, 0xFC, 0x00, 0x3F, 0x80, 0x03, 0xF0, 0x00, 0x7C, 0x00, - 0x1F, 0x80, 0x03, 0xE0, 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x03, - 0xE0, 0x00, 0xF8, 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x03, 0xE0, 0x00, 0xF8, - 0x00, 0x3E, 0x00, 0x0F, 0x80, 0x03, 0xE0, 0x00, 0xF8, 0x00, 0x3F, 0x00, - 0x0F, 0xC0, 0x01, 0xF8, 0x00, 0x7F, 0xF0, 0x1F, 0xFC, 0x03, 0xFF, 0x00, - 0xFF, 0xC0, 0x0F, 0xF0, 0x01, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0x00, 0x3F, 0xC0, 0x0F, - 0xFC, 0x03, 0xFF, 0x00, 0xFF, 0xE0, 0x3F, 0xF8, 0x00, 0x7E, 0x00, 0x0F, - 0xC0, 0x03, 0xF0, 0x00, 0x7C, 0x00, 0x1F, 0x00, 0x07, 0xC0, 0x01, 0xF0, - 0x00, 0x7C, 0x00, 0x1F, 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00, 0x7C, 0x00, - 0x1F, 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00, 0x7C, 0x00, 0x1F, 0x00, 0x07, - 0xE0, 0x00, 0xF8, 0x00, 0x3F, 0x00, 0x07, 0xF0, 0x00, 0xFF, 0x00, 0x1F, - 0xC0, 0x01, 0xF0, 0x01, 0xFC, 0x00, 0xFF, 0x00, 0x7F, 0x00, 0x3F, 0x00, - 0x0F, 0x80, 0x07, 0xE0, 0x01, 0xF0, 0x00, 0x7C, 0x00, 0x1F, 0x00, 0x07, - 0xC0, 0x01, 0xF0, 0x00, 0x7C, 0x00, 0x1F, 0x00, 0x07, 0xC0, 0x01, 0xF0, - 0x00, 0x7C, 0x00, 0x1F, 0x00, 0x07, 0xC0, 0x01, 0xF0, 0x00, 0x7C, 0x00, - 0x3F, 0x00, 0x0F, 0xC0, 0x07, 0xE0, 0x3F, 0xF8, 0x0F, 0xFE, 0x03, 0xFF, - 0x00, 0xFF, 0xC0, 0x3F, 0xC0, 0x0F, 0xC0, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x3F, 0xF8, 0x00, 0x04, 0xFF, 0xFC, 0x00, 0x1B, 0xFF, 0xFE, 0x00, 0xFF, - 0xFF, 0xFF, 0x83, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xF0, - 0x03, 0xFF, 0xFE, 0xC0, 0x01, 0xFF, 0xF9, 0x00, 0x00, 0xFF, 0xE0, 0x00, - 0x00, 0x7F, 0x00 -}; - -static const GFXglyph Quito32pt7bGlyphs[] = { - { 0, 0, 0, 32, 0, 1 } // ' ' - ,{ 0, 7, 45, 18, 5, -44 } // '!' - ,{ 40, 16, 16, 22, 3, -44 } // '"' - ,{ 72, 33, 45, 35, 1, -44 } // '#' - ,{ 258, 48, 71, 65, 8, -67 } // '$' - ,{ 684, 48, 47, 56, 4, -45 } // '%' - ,{ 966, 38, 47, 42, 3, -45 } // '&' - ,{ 1190, 6, 16, 12, 3, -44 } // ''' - ,{ 1202, 15, 58, 21, 4, -44 } // '(' - ,{ 1311, 15, 58, 21, 4, -44 } // ')' - ,{ 1420, 20, 19, 25, 2, -44 } // '*' - ,{ 1468, 29, 29, 37, 4, -36 } // '+' - ,{ 1574, 7, 15, 18, 5, -5 } // ',' - ,{ 1588, 17, 5, 21, 2, -18 } // '-' - ,{ 1599, 6, 6, 18, 6, -5 } // '.' - ,{ 1604, 18, 45, 18, 0, -44 } // '/' - ,{ 1706, 29, 46, 35, 3, -44 } // '0' - ,{ 1874, 16, 46, 35, 7, -44 } // '1' - ,{ 1966, 30, 46, 35, 2, -44 } // '2' - ,{ 2139, 29, 46, 35, 3, -44 } // '3' - ,{ 2307, 31, 46, 35, 1, -44 } // '4' - ,{ 2486, 30, 46, 35, 3, -44 } // '5' - ,{ 2659, 30, 46, 35, 2, -44 } // '6' - ,{ 2832, 29, 46, 35, 3, -44 } // '7' - ,{ 3000, 29, 46, 35, 3, -44 } // '8' - ,{ 3167, 29, 46, 35, 3, -44 } // '9' - ,{ 3334, 6, 33, 18, 6, -32 } // ':' - ,{ 3359, 7, 42, 18, 5, -32 } // ';' - ,{ 3396, 30, 31, 37, 3, -37 } // '<' - ,{ 3513, 29, 19, 37, 4, -31 } // '=' - ,{ 3582, 30, 31, 37, 3, -37 } // '>' - ,{ 3699, 29, 46, 35, 3, -45 } // '?' - ,{ 3866, 59, 59, 64, 3, -45 } // '@' - ,{ 4302, 48, 65, 65, 8, -64 } // 'A' - ,{ 4692, 47, 65, 65, 9, -64 } // 'B' - ,{ 5074, 58, 64, 65, 3, -63 } // 'C' - ,{ 5538, 47, 65, 65, 9, -64 } // 'D' - ,{ 5920, 47, 65, 65, 9, -64 } // 'E' - ,{ 6302, 47, 65, 65, 9, -64 } // 'F' - ,{ 6684, 58, 64, 65, 3, -63 } // 'G' - ,{ 7148, 47, 65, 65, 9, -64 } // 'H' - ,{ 7530, 6, 65, 25, 9, -64 } // 'I' - ,{ 7579, 54, 64, 65, 5, -63 } // 'J' - ,{ 8011, 47, 65, 65, 9, -64 } // 'K' - ,{ 8393, 47, 65, 65, 9, -64 } // 'L' - ,{ 8775, 64, 63, 82, 9, -62 } // 'M' - ,{ 9279, 47, 65, 65, 9, -64 } // 'N' - ,{ 9661, 64, 64, 65, 0, -63 } // 'O' - ,{ 10173, 58, 65, 65, 3, -64 } // 'P' - ,{ 10645, 65, 64, 65, 0, -63 } // 'Q' - ,{ 11165, 48, 64, 65, 8, -63 } // 'R' - ,{ 11549, 48, 64, 65, 8, -63 } // 'S' - ,{ 11933, 45, 64, 65, 12, -63 } // 'T' - ,{ 12293, 47, 64, 65, 9, -63 } // 'U' - ,{ 12669, 47, 65, 65, 9, -64 } // 'V' - ,{ 13051, 65, 65, 65, 0, -64 } // 'W' - ,{ 13580, 47, 65, 65, 9, -64 } // 'X' - ,{ 13962, 58, 64, 65, 3, -63 } // 'Y' - ,{ 14426, 57, 64, 77, 9, -63 } // 'Z' - ,{ 14882, 12, 58, 18, 4, -44 } // '[' - ,{ 14969, 18, 45, 18, 0, -44 } // '\' - ,{ 15071, 12, 58, 18, 1, -44 } // ']' - ,{ 15158, 26, 24, 30, 2, -45 } // '^' - ,{ 15236, 37, 5, 35, -1, 9 } // '_' - ,{ 15260, 11, 9, 21, 3, -44 } // '`' - ,{ 15273, 48, 65, 65, 8, -64 } // 'a' - ,{ 15663, 47, 65, 65, 9, -64 } // 'b' - ,{ 16045, 58, 64, 65, 3, -63 } // 'c' - ,{ 16509, 47, 65, 65, 9, -64 } // 'd' - ,{ 16891, 47, 65, 65, 9, -64 } // 'e' - ,{ 17273, 47, 65, 65, 9, -64 } // 'f' - ,{ 17655, 58, 64, 65, 3, -63 } // 'g' - ,{ 18119, 47, 65, 65, 9, -64 } // 'h' - ,{ 18501, 6, 65, 25, 9, -64 } // 'i' - ,{ 18550, 54, 64, 65, 5, -63 } // 'j' - ,{ 18982, 47, 65, 65, 9, -64 } // 'k' - ,{ 19364, 47, 65, 65, 9, -64 } // 'l' - ,{ 19746, 64, 63, 82, 9, -62 } // 'm' - ,{ 20250, 47, 65, 65, 9, -64 } // 'n' - ,{ 20632, 64, 64, 65, 0, -63 } // 'o' - ,{ 21144, 58, 65, 65, 3, -64 } // 'p' - ,{ 21616, 65, 64, 65, 0, -63 } // 'q' - ,{ 22136, 48, 64, 65, 8, -63 } // 'r' - ,{ 22520, 48, 64, 65, 8, -63 } // 's' - ,{ 22904, 45, 64, 65, 12, -63 } // 't' - ,{ 23264, 47, 64, 65, 9, -63 } // 'u' - ,{ 23640, 47, 65, 65, 9, -64 } // 'v' - ,{ 24022, 65, 65, 65, 0, -64 } // 'w' - ,{ 24551, 47, 65, 65, 9, -64 } // 'x' - ,{ 24933, 58, 64, 65, 3, -63 } // 'y' - ,{ 25397, 57, 64, 77, 9, -63 } // 'z' - ,{ 25853, 18, 59, 21, 2, -45 } // '{' - ,{ 25986, 5, 59, 16, 6, -44 } // '|' - ,{ 26023, 18, 59, 21, 1, -45 } // '}' - ,{ 26156, 31, 11, 37, 3, -26 } // '~' -}; - -static const GFXfont Quito32pt7b = { - (uint8_t *)Quito32pt7bBitmaps, - (GFXglyph *)Quito32pt7bGlyphs, 0x20, 0x7e, 109 }; - - -#endif diff --git a/Src/fpga.c b/Src/fpga.c deleted file mode 100644 index 125751c..0000000 --- a/Src/fpga.c +++ /dev/null @@ -1,609 +0,0 @@ -#include "fpga.h" -#include "main.h" -#include "trx_manager.h" -#include "rf_unit.h" - -// Public variables -volatile uint32_t FPGA_samples = 0; // counter of the number of samples when exchanging with FPGA -volatile bool FPGA_NeedSendParams = false; // flag of the need to send parameters to FPGA -volatile bool FPGA_NeedGetParams = false; // flag of the need to get parameters from FPGA -volatile bool FPGA_NeedRestart = true; // flag of necessity to restart FPGA modules -volatile bool FPGA_Buffer_underrun = false; // flag of lack of data from FPGA -uint_fast16_t FPGA_Audio_RXBuffer_Index = 0; // current index in FPGA buffers -uint_fast16_t FPGA_Audio_TXBuffer_Index = 0; // current index in FPGA buffers -bool FPGA_Audio_Buffer_State = true; // buffer state, half or full full true - compleate; false - half -IRAM1 volatile float32_t FPGA_Audio_Buffer_RX_Q[FPGA_RX_IQ_BUFFER_SIZE] = {0}; // FPGA buffers -IRAM1 volatile float32_t FPGA_Audio_Buffer_RX_I[FPGA_RX_IQ_BUFFER_SIZE] = {0}; -IRAM1 volatile float32_t FPGA_Audio_SendBuffer_Q[FPGA_TX_IQ_BUFFER_SIZE] = {0}; -IRAM1 volatile float32_t FPGA_Audio_SendBuffer_I[FPGA_TX_IQ_BUFFER_SIZE] = {0}; - -// Private variables -static GPIO_InitTypeDef FPGA_GPIO_InitStruct; // structure of GPIO ports -static bool FPGA_bus_stop = false; // suspend the FPGA bus - -// Prototypes -static inline void FPGA_clockFall(void); // remove CLK signal -static inline void FPGA_clockRise(void); // raise the CLK signal -static inline void FPGA_syncAndClockRiseFall(void); // raise CLK and SYNC signals, then release -static void FPGA_fpgadata_sendiq(void); // send IQ data -static void FPGA_fpgadata_getiq(void); // get IQ data -static void FPGA_fpgadata_getparam(void); // get parameters -static void FPGA_fpgadata_sendparam(void); // send parameters -static void FPGA_setBusInput(void); // switch the bus to input -static void FPGA_setBusOutput(void); // switch bus to pin - -// initialize exchange with FPGA -void FPGA_Init(void) -{ - FPGA_GPIO_InitStruct.Pin = FPGA_BUS_D0_Pin | FPGA_BUS_D1_Pin | FPGA_BUS_D2_Pin | FPGA_BUS_D3_Pin | FPGA_BUS_D4_Pin | FPGA_BUS_D5_Pin | FPGA_BUS_D6_Pin | FPGA_BUS_D7_Pin; - FPGA_GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - FPGA_GPIO_InitStruct.Pull = GPIO_PULLUP; - FPGA_GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - HAL_GPIO_Init(FPGA_BUS_D0_GPIO_Port, &FPGA_GPIO_InitStruct); - - FPGA_GPIO_InitStruct.Pin = FPGA_CLK_Pin | FPGA_SYNC_Pin; - FPGA_GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - FPGA_GPIO_InitStruct.Pull = GPIO_PULLUP; - FPGA_GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - HAL_GPIO_Init(FPGA_CLK_GPIO_Port, &FPGA_GPIO_InitStruct); - - FPGA_bus_stop = true; - FPGA_setBusOutput(); - FPGA_writePacket(5); // RESET ON - FPGA_syncAndClockRiseFall(); - HAL_Delay(100); - FPGA_writePacket(6); // RESET OFF - FPGA_syncAndClockRiseFall(); - FPGA_NeedRestart = false; - FPGA_bus_stop = false; - - //test bus - /*FPGA_setBusOutput(); - FPGA_writePacket(0); - FPGA_syncAndClockRiseFall(); - - for(uint8_t i = 0; i<8; i++) - { - FPGA_writePacket(1 << i); - FPGA_clockRise(); - FPGA_writePacket(0); - FPGA_clockFall(); - sendToDebug_uint8(FPGA_readPacket,false); - }*/ -} - -// restart FPGA modules -void FPGA_restart(void) // restart FPGA modules -{ - static bool FPGA_restart_state = false; - if(!FPGA_restart_state) - { - FPGA_setBusOutput(); - FPGA_writePacket(5); // RESET ON - FPGA_syncAndClockRiseFall(); - } - else - { - FPGA_writePacket(6); // RESET OFF - FPGA_syncAndClockRiseFall(); - FPGA_NeedRestart = false; - } - FPGA_restart_state = !FPGA_restart_state; -} - -// exchange parameters with FPGA -void FPGA_fpgadata_stuffclock(void) -{ - if (!FPGA_NeedSendParams && !FPGA_NeedGetParams && !FPGA_NeedRestart) - return; - if (FPGA_bus_stop) - return; - uint8_t FPGA_fpgadata_out_tmp8 = 0; - //data exchange - - //STAGE 1 - //out - if (FPGA_NeedSendParams) //send params - FPGA_fpgadata_out_tmp8 = 1; - else //get params - FPGA_fpgadata_out_tmp8 = 2; - - FPGA_setBusOutput(); - FPGA_writePacket(FPGA_fpgadata_out_tmp8); - FPGA_syncAndClockRiseFall(); - - if (FPGA_NeedSendParams) - { - FPGA_fpgadata_sendparam(); - FPGA_NeedSendParams = false; - } - else if (FPGA_NeedGetParams) - { - FPGA_fpgadata_getparam(); - FPGA_NeedGetParams = false; - } - else if (FPGA_NeedRestart) - { - FPGA_restart(); - } -} - -// exchange IQ data with FPGA -void FPGA_fpgadata_iqclock(void) -{ - if (FPGA_bus_stop) - return; - uint8_t FPGA_fpgadata_out_tmp8 = 4; //RX - VFO *current_vfo = CurrentVFO(); - if (current_vfo->Mode == TRX_MODE_LOOPBACK) - return; - //data exchange - - //STAGE 1 - //out - if (TRX_on_TX()) - FPGA_fpgadata_out_tmp8 = 3; //TX - - FPGA_setBusOutput(); - FPGA_writePacket(FPGA_fpgadata_out_tmp8); - FPGA_syncAndClockRiseFall(); - - if (TRX_on_TX()) - FPGA_fpgadata_sendiq(); - else - FPGA_fpgadata_getiq(); -} - -// send parameters -static inline void FPGA_fpgadata_sendparam(void) -{ - uint8_t FPGA_fpgadata_out_tmp8 = 0; - VFO *current_vfo = CurrentVFO(); - - //STAGE 2 - //out PTT+PREAMP - uint8_t att_val = (uint8_t)TRX.ATT_DB; - bitWrite(FPGA_fpgadata_out_tmp8, 0, (!TRX_on_TX() && current_vfo->Mode != TRX_MODE_LOOPBACK)); //RX - bitWrite(FPGA_fpgadata_out_tmp8, 1, TRX.ADC_Driver); - if(TRX.ATT) - { - bitWrite(FPGA_fpgadata_out_tmp8, 2, 0); //att0.5 - bitWrite(FPGA_fpgadata_out_tmp8, 3, (att_val >> 0) & 0x1); //att1 - bitWrite(FPGA_fpgadata_out_tmp8, 4, (att_val >> 1) & 0x1); //att2 - bitWrite(FPGA_fpgadata_out_tmp8, 5, (att_val >> 2) & 0x1); //att4 - bitWrite(FPGA_fpgadata_out_tmp8, 6, (att_val >> 3) & 0x1); //att8 - bitWrite(FPGA_fpgadata_out_tmp8, 7, (att_val >> 4) & 0x1); //att16 - } - FPGA_writePacket(FPGA_fpgadata_out_tmp8); - FPGA_clockRise(); - FPGA_clockFall(); - - //STAGE 3 - //out RX1-FREQ - FPGA_writePacket(((TRX_freq_phrase & (0XFF << 16)) >> 16)); - FPGA_clockRise(); - FPGA_clockFall(); - - //STAGE 4 - //OUT RX1-FREQ - FPGA_writePacket(((TRX_freq_phrase & (0XFF << 8)) >> 8)); - FPGA_clockRise(); - FPGA_clockFall(); - - //STAGE 5 - //OUT RX1-FREQ - FPGA_writePacket(TRX_freq_phrase & 0XFF); - FPGA_clockRise(); - FPGA_clockFall(); - - //STAGE 9 - //OUT CIC-GAIN - FPGA_writePacket(CALIBRATE.CIC_GAINER_val); - FPGA_clockRise(); - FPGA_clockFall(); - - //STAGE 10 - //OUT CICCOMP-GAIN - FPGA_writePacket(CALIBRATE.CICFIR_GAINER_val); - FPGA_clockRise(); - FPGA_clockFall(); - - //STAGE 11 - //OUT TX-CICCOMP-GAIN - FPGA_writePacket(CALIBRATE.TXCICFIR_GAINER_val); - FPGA_clockRise(); - FPGA_clockFall(); - - //STAGE 12 - //OUT DAC-GAIN - FPGA_writePacket(CALIBRATE.DAC_GAINER_val); - FPGA_clockRise(); - FPGA_clockFall(); - - //STAGE 13 - //out TX-FREQ - FPGA_writePacket(((TRX_freq_phrase_tx & (0XFF << 16)) >> 16)); - FPGA_clockRise(); - FPGA_clockFall(); - - //STAGE 14 - //OUT TX-FREQ - FPGA_writePacket(((TRX_freq_phrase_tx & (0XFF << 8)) >> 8)); - FPGA_clockRise(); - FPGA_clockFall(); - - //STAGE 15 - //OUT TX-FREQ - FPGA_writePacket(TRX_freq_phrase_tx & 0XFF); - FPGA_clockRise(); - FPGA_clockFall(); - - //STAGE 16 - //out BPF - FPGA_fpgadata_out_tmp8 = 0; - if(CurrentVFO()->Freq >= 1500000 && CurrentVFO()->Freq <= 2400000) //160m - { - bitWrite(FPGA_fpgadata_out_tmp8, 0, 0); //BPF_A - bitWrite(FPGA_fpgadata_out_tmp8, 1, 0); //BPF_B - bitWrite(FPGA_fpgadata_out_tmp8, 3, 1); //BPF_OE1 - bitWrite(FPGA_fpgadata_out_tmp8, 2, 0); //BPF_OE2 - bitWrite(FPGA_fpgadata_out_tmp8, 4, 0); //LPF1 - bitWrite(FPGA_fpgadata_out_tmp8, 5, 0); //LPF2 - bitWrite(FPGA_fpgadata_out_tmp8, 6, 0); //LPF3 - } - else if(CurrentVFO()->Freq >= 2400000 && CurrentVFO()->Freq <= 4500000) //80m - { - bitWrite(FPGA_fpgadata_out_tmp8, 0, 1); //BPF_A - bitWrite(FPGA_fpgadata_out_tmp8, 1, 0); //BPF_B - bitWrite(FPGA_fpgadata_out_tmp8, 3, 1); //BPF_OE1 - bitWrite(FPGA_fpgadata_out_tmp8, 2, 0); //BPF_OE2 - bitWrite(FPGA_fpgadata_out_tmp8, 4, 1); //LPF1 - bitWrite(FPGA_fpgadata_out_tmp8, 5, 0); //LPF2 - bitWrite(FPGA_fpgadata_out_tmp8, 6, 0); //LPF3 - } - else if(CurrentVFO()->Freq >= 4500000 && CurrentVFO()->Freq <= 7500000) //40m - { - bitWrite(FPGA_fpgadata_out_tmp8, 0, 0); //BPF_A - bitWrite(FPGA_fpgadata_out_tmp8, 1, 1); //BPF_B - bitWrite(FPGA_fpgadata_out_tmp8, 3, 1); //BPF_OE1 - bitWrite(FPGA_fpgadata_out_tmp8, 2, 0); //BPF_OE2 - bitWrite(FPGA_fpgadata_out_tmp8, 4, 0); //LPF1 - bitWrite(FPGA_fpgadata_out_tmp8, 5, 1); //LPF2 - bitWrite(FPGA_fpgadata_out_tmp8, 6, 0); //LPF3 - } - else if(CurrentVFO()->Freq >= 7500000 && CurrentVFO()->Freq <= 12000000) //30m - { - bitWrite(FPGA_fpgadata_out_tmp8, 0, 1); //BPF_A - bitWrite(FPGA_fpgadata_out_tmp8, 1, 1); //BPF_B - bitWrite(FPGA_fpgadata_out_tmp8, 3, 1); //BPF_OE1 - bitWrite(FPGA_fpgadata_out_tmp8, 2, 0); //BPF_OE2 - bitWrite(FPGA_fpgadata_out_tmp8, 4, 1); //LPF1 - bitWrite(FPGA_fpgadata_out_tmp8, 5, 1); //LPF2 - bitWrite(FPGA_fpgadata_out_tmp8, 6, 0); //LPF3 - } - else if(CurrentVFO()->Freq >= 12000000 && CurrentVFO()->Freq <= 14800000) //20m - { - bitWrite(FPGA_fpgadata_out_tmp8, 0, 0); //BPF_A - bitWrite(FPGA_fpgadata_out_tmp8, 1, 0); //BPF_B - bitWrite(FPGA_fpgadata_out_tmp8, 3, 0); //BPF_OE1 - bitWrite(FPGA_fpgadata_out_tmp8, 2, 1); //BPF_OE2 - bitWrite(FPGA_fpgadata_out_tmp8, 4, 0); //LPF1 - bitWrite(FPGA_fpgadata_out_tmp8, 5, 0); //LPF2 - bitWrite(FPGA_fpgadata_out_tmp8, 6, 1); //LPF3 - } - else if(CurrentVFO()->Freq >= 14800000 && CurrentVFO()->Freq <= 22000000) //17,15m - { - bitWrite(FPGA_fpgadata_out_tmp8, 0, 1); //BPF_A - bitWrite(FPGA_fpgadata_out_tmp8, 1, 0); //BPF_B - bitWrite(FPGA_fpgadata_out_tmp8, 3, 0); //BPF_OE1 - bitWrite(FPGA_fpgadata_out_tmp8, 2, 1); //BPF_OE2 - bitWrite(FPGA_fpgadata_out_tmp8, 4, 1); //LPF1 - bitWrite(FPGA_fpgadata_out_tmp8, 5, 0); //LPF2 - bitWrite(FPGA_fpgadata_out_tmp8, 6, 1); //LPF3 - } - else if(CurrentVFO()->Freq >= 22000000 && CurrentVFO()->Freq <= 32000000) //12,10m - { - bitWrite(FPGA_fpgadata_out_tmp8, 0, 0); //BPF_A - bitWrite(FPGA_fpgadata_out_tmp8, 1, 1); //BPF_B - bitWrite(FPGA_fpgadata_out_tmp8, 3, 0); //BPF_OE1 - bitWrite(FPGA_fpgadata_out_tmp8, 2, 1); //BPF_OE2 - bitWrite(FPGA_fpgadata_out_tmp8, 4, 0); //LPF1 - bitWrite(FPGA_fpgadata_out_tmp8, 5, 1); //LPF2 - bitWrite(FPGA_fpgadata_out_tmp8, 6, 1); //LPF3 - } - else //if(CurrentVFO()->Freq >= 0 && CurrentVFO()->Freq <= 53000000) //6m - { - bitWrite(FPGA_fpgadata_out_tmp8, 0, 1); //BPF_A - bitWrite(FPGA_fpgadata_out_tmp8, 1, 1); //BPF_B - bitWrite(FPGA_fpgadata_out_tmp8, 3, 0); //BPF_OE1 - bitWrite(FPGA_fpgadata_out_tmp8, 2, 1); //BPF_OE2 - bitWrite(FPGA_fpgadata_out_tmp8, 4, 1); //LPF1 - bitWrite(FPGA_fpgadata_out_tmp8, 5, 1); //LPF2 - bitWrite(FPGA_fpgadata_out_tmp8, 6, 1); //LPF3 - } - //bitWrite(FPGA_fpgadata_out_tmp8, 7, 0); //unused - FPGA_writePacket(FPGA_fpgadata_out_tmp8); - FPGA_clockRise(); - FPGA_clockFall(); -} - -// get parameters -static inline void FPGA_fpgadata_getparam(void) -{ - register uint8_t FPGA_fpgadata_in_tmp8 = 0; - register int32_t FPGA_fpgadata_in_tmp32 = 0; - FPGA_setBusInput(); - - //STAGE 2 - FPGA_clockRise(); - FPGA_fpgadata_in_tmp8 = FPGA_readPacket; - TRX_ADC_OTR = bitRead(FPGA_fpgadata_in_tmp8, 0); - TRX_DAC_OTR = bitRead(FPGA_fpgadata_in_tmp8, 1); - FPGA_clockFall(); - - //STAGE 3 - FPGA_clockRise(); - FPGA_fpgadata_in_tmp8 = FPGA_readPacket; - FPGA_clockFall(); - //STAGE 4 - FPGA_clockRise(); - TRX_ADC_MINAMPLITUDE = (int16_t)(((FPGA_fpgadata_in_tmp8 << 8) & 0xFF00) | FPGA_readPacket); - bitWrite(TRX_ADC_MINAMPLITUDE, 15, bitRead(TRX_ADC_MINAMPLITUDE, 11)); //EXTEND 12 To 16 BITS - bitWrite(TRX_ADC_MINAMPLITUDE, 14, bitRead(TRX_ADC_MINAMPLITUDE, 11)); - bitWrite(TRX_ADC_MINAMPLITUDE, 13, bitRead(TRX_ADC_MINAMPLITUDE, 11)); - bitWrite(TRX_ADC_MINAMPLITUDE, 12, bitRead(TRX_ADC_MINAMPLITUDE, 11)); - FPGA_clockFall(); - - //STAGE 5 - FPGA_clockRise(); - FPGA_fpgadata_in_tmp8 = FPGA_readPacket; - FPGA_clockFall(); - //STAGE 6 - FPGA_clockRise(); - TRX_ADC_MAXAMPLITUDE = (int16_t)(((FPGA_fpgadata_in_tmp8 << 8) & 0xFF00) | FPGA_readPacket); - bitWrite(TRX_ADC_MAXAMPLITUDE, 15, bitRead(TRX_ADC_MAXAMPLITUDE, 11)); //EXTEND 12 To 16 BITS - bitWrite(TRX_ADC_MAXAMPLITUDE, 14, bitRead(TRX_ADC_MAXAMPLITUDE, 11)); - bitWrite(TRX_ADC_MAXAMPLITUDE, 13, bitRead(TRX_ADC_MAXAMPLITUDE, 11)); - bitWrite(TRX_ADC_MAXAMPLITUDE, 12, bitRead(TRX_ADC_MAXAMPLITUDE, 11)); - FPGA_clockFall(); -} - -// get IQ data -static inline void FPGA_fpgadata_getiq(void) -{ - register int16_t FPGA_fpgadata_in_tmp16 = 0; - float32_t* FFTInput_I_current = FFT_buff_current ? (float32_t*)&FFTInput_I_B : (float32_t*)&FFTInput_I_A; - float32_t* FFTInput_Q_current = FFT_buff_current ? (float32_t*)&FFTInput_Q_B : (float32_t*)&FFTInput_Q_A; - - float32_t FPGA_fpgadata_in_float32 = 0; - FPGA_samples++; - FPGA_setBusInput(); - - //Q RX - //STAGE 2 - FPGA_clockRise(); - FPGA_fpgadata_in_tmp16 = (FPGA_readPacket << 8); - FPGA_clockFall(); - - //STAGE 3 - FPGA_clockRise(); - FPGA_fpgadata_in_tmp16 |= (FPGA_readPacket); - - /*static float32_t min = 0; - static float32_t max = 0; - if((float32_t)FPGA_fpgadata_in_tmp16 < min) - min = (float32_t)FPGA_fpgadata_in_tmp16; - if((float32_t)FPGA_fpgadata_in_tmp16 > max) - max = (float32_t)FPGA_fpgadata_in_tmp16; - if(FPGA_samples == 100) - { - sendToDebug_float32(min, false); - sendToDebug_float32(max, false); - sendToDebug_newline(); - min = 0; - max = 0; - }*/ - - FPGA_fpgadata_in_float32 = (float32_t)FPGA_fpgadata_in_tmp16 / 32768.0f; - if (TRX_RX_IQ_swap) - { - FFTInput_I_current[FFT_buff_index] = FPGA_fpgadata_in_float32; - FPGA_Audio_Buffer_RX_I[FPGA_Audio_RXBuffer_Index] = FPGA_fpgadata_in_float32; - } - else - { - FFTInput_Q_current[FFT_buff_index] = FPGA_fpgadata_in_float32; - FPGA_Audio_Buffer_RX_Q[FPGA_Audio_RXBuffer_Index] = FPGA_fpgadata_in_float32; - } - FPGA_clockFall(); - - //I RX1 - //STAGE 4 - FPGA_clockRise(); - FPGA_fpgadata_in_tmp16 = (FPGA_readPacket << 8); - FPGA_clockFall(); - - //STAGE 5 - FPGA_clockRise(); - FPGA_fpgadata_in_tmp16 |= (FPGA_readPacket); - - FPGA_fpgadata_in_float32 = (float32_t)FPGA_fpgadata_in_tmp16 / 32768.0f; - if (TRX_RX_IQ_swap) - { - FFTInput_Q_current[FFT_buff_index] = FPGA_fpgadata_in_float32; - FPGA_Audio_Buffer_RX_Q[FPGA_Audio_RXBuffer_Index] = FPGA_fpgadata_in_float32; - } - else - { - FFTInput_I_current[FFT_buff_index] = FPGA_fpgadata_in_float32; - FPGA_Audio_Buffer_RX_I[FPGA_Audio_RXBuffer_Index] = FPGA_fpgadata_in_float32; - } - FPGA_clockFall(); - - FPGA_Audio_RXBuffer_Index++; - if (FPGA_Audio_RXBuffer_Index == FPGA_RX_IQ_BUFFER_SIZE) - FPGA_Audio_RXBuffer_Index = 0; - - FFT_buff_index++; - if (FFT_buff_index >= FFT_SIZE) - { - FFT_buff_index = 0; - FFT_new_buffer_ready = true; - FFT_buff_current = !FFT_buff_current; - } - FPGA_clockFall(); -} - -// send IQ data -static inline void FPGA_fpgadata_sendiq(void) -{ - q15_t FPGA_fpgadata_out_q_tmp16 = 0; - q15_t FPGA_fpgadata_out_i_tmp16 = 0; - q15_t FPGA_fpgadata_out_tmp_tmp16 = 0; - arm_float_to_q15((float32_t *)&FPGA_Audio_SendBuffer_Q[FPGA_Audio_TXBuffer_Index], &FPGA_fpgadata_out_q_tmp16, 1); - arm_float_to_q15((float32_t *)&FPGA_Audio_SendBuffer_I[FPGA_Audio_TXBuffer_Index], &FPGA_fpgadata_out_i_tmp16, 1); - FPGA_samples++; - - if (TRX_TX_IQ_swap) - { - FPGA_fpgadata_out_tmp_tmp16 = FPGA_fpgadata_out_i_tmp16; - FPGA_fpgadata_out_i_tmp16 = FPGA_fpgadata_out_q_tmp16; - FPGA_fpgadata_out_q_tmp16 = FPGA_fpgadata_out_tmp_tmp16; - } - - //out Q - //STAGE 2 - FPGA_writePacket((FPGA_fpgadata_out_q_tmp16 >> 8) & 0xFF); - //clock - FPGA_clockRise(); - //clock - FPGA_clockFall(); - - //STAGE 3 - FPGA_writePacket((FPGA_fpgadata_out_q_tmp16 >> 0) & 0xFF); - //clock - FPGA_clockRise(); - //clock - FPGA_clockFall(); - - //out I - //STAGE 4 - FPGA_writePacket((FPGA_fpgadata_out_i_tmp16 >> 8) & 0xFF); - //clock - FPGA_clockRise(); - //clock - FPGA_clockFall(); - - //STAGE 5 - FPGA_writePacket((FPGA_fpgadata_out_i_tmp16 >> 0) & 0xFF); - //clock - FPGA_clockRise(); - //clock - FPGA_clockFall(); - - FPGA_Audio_TXBuffer_Index++; - if (FPGA_Audio_TXBuffer_Index == FPGA_TX_IQ_BUFFER_SIZE) - { - if (Processor_NeedTXBuffer) - { - FPGA_Buffer_underrun = true; - FPGA_Audio_TXBuffer_Index--; - } - else - { - FPGA_Audio_TXBuffer_Index = 0; - FPGA_Audio_Buffer_State = true; - Processor_NeedTXBuffer = true; - } - } - else if (FPGA_Audio_TXBuffer_Index == FPGA_TX_IQ_BUFFER_HALF_SIZE) - { - if (Processor_NeedTXBuffer) - { - FPGA_Buffer_underrun = true; - FPGA_Audio_TXBuffer_Index--; - } - else - { - FPGA_Audio_Buffer_State = false; - Processor_NeedTXBuffer = true; - } - } -} - -// switch the bus to input -static inline void FPGA_setBusInput(void) -{ - // Configure IO Direction mode (Input) - /*register uint32_t temp = GPIOA->MODER; - temp &= ~(GPIO_MODER_MODE0 << (0 * 2U)); - temp |= ((GPIO_MODE_INPUT & 0x00000003U) << (0 * 2U)); - temp &= ~(GPIO_MODER_MODE0 << (1 * 2U)); - temp |= ((GPIO_MODE_INPUT & 0x00000003U) << (1 * 2U)); - temp &= ~(GPIO_MODER_MODE0 << (2 * 2U)); - temp |= ((GPIO_MODE_INPUT & 0x00000003U) << (2 * 2U)); - temp &= ~(GPIO_MODER_MODE0 << (3 * 2U)); - temp |= ((GPIO_MODE_INPUT & 0x00000003U) << (3 * 2U)); - temp &= ~(GPIO_MODER_MODE0 << (4 * 2U)); - temp |= ((GPIO_MODE_INPUT & 0x00000003U) << (4 * 2U)); - temp &= ~(GPIO_MODER_MODE0 << (5 * 2U)); - temp |= ((GPIO_MODE_INPUT & 0x00000003U) << (5 * 2U)); - temp &= ~(GPIO_MODER_MODE0 << (6 * 2U)); - temp |= ((GPIO_MODE_INPUT & 0x00000003U) << (6 * 2U)); - temp &= ~(GPIO_MODER_MODE0 << (7 * 2U)); - temp |= ((GPIO_MODE_INPUT & 0x00000003U) << (7 * 2U)); - sendToDebug_uint32(temp,false); - GPIOA->MODER = temp;*/ - GPIOA->MODER = -1431764992; - __asm("nop");__asm("nop");__asm("nop"); -} - -// switch bus to pin -static inline void FPGA_setBusOutput(void) -{ - // Configure IO Direction mode (Output) - /*uint32_t temp = GPIOA->MODER; - temp &= ~(GPIO_MODER_MODE0 << (0 * 2U)); - temp |= ((GPIO_MODE_OUTPUT_PP & 0x00000003U) << (0 * 2U)); - temp &= ~(GPIO_MODER_MODE0 << (1 * 2U)); - temp |= ((GPIO_MODE_OUTPUT_PP & 0x00000003U) << (1 * 2U)); - temp &= ~(GPIO_MODER_MODE0 << (2 * 2U)); - temp |= ((GPIO_MODE_OUTPUT_PP & 0x00000003U) << (2 * 2U)); - temp &= ~(GPIO_MODER_MODE0 << (3 * 2U)); - temp |= ((GPIO_MODE_OUTPUT_PP & 0x00000003U) << (3 * 2U)); - temp &= ~(GPIO_MODER_MODE0 << (4 * 2U)); - temp |= ((GPIO_MODE_OUTPUT_PP & 0x00000003U) << (4 * 2U)); - temp &= ~(GPIO_MODER_MODE0 << (5 * 2U)); - temp |= ((GPIO_MODE_OUTPUT_PP & 0x00000003U) << (5 * 2U)); - temp &= ~(GPIO_MODER_MODE0 << (6 * 2U)); - temp |= ((GPIO_MODE_OUTPUT_PP & 0x00000003U) << (6 * 2U)); - temp &= ~(GPIO_MODER_MODE0 << (7 * 2U)); - temp |= ((GPIO_MODE_OUTPUT_PP & 0x00000003U) << (7 * 2U)); - sendToDebug_uint32(temp,false); - GPIOA->MODER = temp;*/ - GPIOA->MODER = -1431743147; - __asm("nop");__asm("nop");__asm("nop"); -} - -// raise the CLK signal -static inline void FPGA_clockRise(void) -{ - FPGA_CLK_GPIO_Port->BSRR = FPGA_CLK_Pin; - __asm("nop");__asm("nop");__asm("nop"); -} - -// remove CLK signal -static inline void FPGA_clockFall(void) -{ - FPGA_CLK_GPIO_Port->BSRR = (FPGA_CLK_Pin << 16U); - __asm("nop");__asm("nop");__asm("nop"); -} - -// raise CLK and SYNC signal, then lower -static inline void FPGA_syncAndClockRiseFall(void) -{ - FPGA_CLK_GPIO_Port->BSRR = FPGA_SYNC_Pin; - FPGA_CLK_GPIO_Port->BSRR = FPGA_CLK_Pin; - FPGA_CLK_GPIO_Port->BSRR = (FPGA_SYNC_Pin << 16U) | (FPGA_CLK_Pin << 16U); - __asm("nop");__asm("nop");__asm("nop"); -} diff --git a/Src/fpga.h b/Src/fpga.h deleted file mode 100644 index 4774418..0000000 --- a/Src/fpga.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef FPGA_h -#define FPGA_h - -#include "stm32f4xx_hal.h" -#include -#include "fft.h" -#include "audio_processor.h" -#include "settings.h" - -#define FPGA_flash_size 0x200000 -#define FPGA_flash_file_offset (0xA0 - 1) -#define FPGA_sector_size (64 * 1024) -#define FPGA_page_size 256 -#define FPGA_FLASH_COMMAND_DELAY \ - for (uint32_t wait = 0; wait < 50; wait++) \ - __asm("nop"); //50 -#define FPGA_FLASH_WRITE_DELAY \ - for (uint32_t wait = 0; wait < 500; wait++) \ - __asm("nop"); //500 -#define FPGA_FLASH_READ_DELAY \ - for (uint32_t wait = 0; wait < 50; wait++) \ - __asm("nop"); //50 - -#define FPGA_writePacket(value) (FPGA_BUS_D0_GPIO_Port->BSRR = (value) | 0xFF0000) -#define FPGA_readPacket (FPGA_BUS_D0_GPIO_Port->IDR & 0xFF) - -//Micron M25P80 Serial Flash COMMANDS: -#define M25P80_WRITE_ENABLE 0x06 -#define M25P80_WRITE_DISABLE 0x04 -#define M25P80_READ_IDENTIFICATION 0x9F -#define M25P80_READ_IDENTIFICATION2 0x9E -#define M25P80_READ_STATUS_REGISTER 0x05 -#define M25P80_WRITE_STATUS_REGISTER 0x01 -#define M25P80_READ_DATA_BYTES 0x03 -#define M25P80_READ_DATA_BYTES_at_HIGHER_SPEED 0x0B -#define M25P80_PAGE_PROGRAM 0x02 -#define M25P80_SECTOR_ERASE 0xD8 -#define M25P80_BULK_ERASE 0xC7 -#define M25P80_DEEP_POWER_DOWN 0xB9 -#define M25P80_RELEASE_from_DEEP_POWER_DOWN 0xAB - -//Public variables -extern volatile uint32_t FPGA_samples; // counter of the number of samples when exchanging with FPGA -extern volatile bool FPGA_Buffer_underrun; // flag of lack of data from FPGA -extern volatile bool FPGA_NeedSendParams; // flag of the need to send parameters to FPGA -extern volatile bool FPGA_NeedGetParams; // flag of the need to get parameters from FPGA -extern volatile bool FPGA_NeedRestart; // flag of necessity to restart FPGA modules -extern volatile float32_t FPGA_Audio_Buffer_RX_Q[FPGA_RX_IQ_BUFFER_SIZE]; // FPGA buffers -extern volatile float32_t FPGA_Audio_Buffer_RX_I[FPGA_RX_IQ_BUFFER_SIZE]; -extern volatile float32_t FPGA_Audio_SendBuffer_Q[FPGA_TX_IQ_BUFFER_SIZE]; -extern volatile float32_t FPGA_Audio_SendBuffer_I[FPGA_TX_IQ_BUFFER_SIZE]; -extern uint_fast16_t FPGA_Audio_RXBuffer_Index; // current index in FPGA buffers -extern uint_fast16_t FPGA_Audio_TXBuffer_Index; // current index in FPGA buffers -extern bool FPGA_Audio_Buffer_State; // buffer state, half or full full true - compleate; false - half - -//Public methods -extern void FPGA_Init(void); // initialize exchange with FPGA -extern void FPGA_fpgadata_iqclock(void); // exchange IQ data with FPGA -extern void FPGA_fpgadata_stuffclock(void); // exchange parameters with FPGA -extern void FPGA_restart(void); // restart FPGA modules - -#endif diff --git a/Src/front_unit.c b/Src/front_unit.c deleted file mode 100644 index 92659c9..0000000 --- a/Src/front_unit.c +++ /dev/null @@ -1,817 +0,0 @@ -#include "stm32f4xx_hal.h" -#include "main.h" -#include "front_unit.h" -#include "lcd.h" -#include "trx_manager.h" -#include "settings.h" -#include "system_menu.h" -#include "functions.h" -#include "audio_filters.h" -#include "auto_notch.h" -#include "agc.h" - -static void FRONTPANEL_ENCODER_Rotated(float32_t direction); -static void FRONTPANEL_ENCODER2_Rotated(int8_t direction); -static uint16_t FRONTPANEL_ReadMCP3008_Value(uint8_t channel, GPIO_TypeDef *CS_PORT, uint16_t CS_PIN); -static void FRONTPANEL_ENCODER2_Rotated(int8_t direction); - -static void FRONTPANEL_BUTTONHANDLER_MODE_P(void); -static void FRONTPANEL_BUTTONHANDLER_MODE_N(void); -static void FRONTPANEL_BUTTONHANDLER_BAND_P(void); -static void FRONTPANEL_BUTTONHANDLER_BAND_N(void); -static void FRONTPANEL_BUTTONHANDLER_SQUELCH(void); -static void FRONTPANEL_BUTTONHANDLER_WPM(void); -static void FRONTPANEL_BUTTONHANDLER_KEYER(void); -static void FRONTPANEL_BUTTONHANDLER_SHIFT(void); -static void FRONTPANEL_BUTTONHANDLER_CLAR(void); -static void FRONTPANEL_BUTTONHANDLER_STEP(void); -static void FRONTPANEL_BUTTONHANDLER_BANDMAP(void); -static void FRONTPANEL_BUTTONHANDLER_HIDDEN_ENABLE(void); -static void FRONTPANEL_BUTTONHANDLER_PRE(void); -static void FRONTPANEL_BUTTONHANDLER_ATT(void); -static void FRONTPANEL_BUTTONHANDLER_ATTHOLD(void); -static void FRONTPANEL_BUTTONHANDLER_AGC(void); -static void FRONTPANEL_BUTTONHANDLER_AGC_SPEED(void); -static void FRONTPANEL_BUTTONHANDLER_NOTCH(void); -static void FRONTPANEL_BUTTONHANDLER_FAST(void); -static void FRONTPANEL_BUTTONHANDLER_MUTE(void); -static void FRONTPANEL_BUTTONHANDLER_AsB(void); -static void FRONTPANEL_BUTTONHANDLER_ArB(void); -static void FRONTPANEL_BUTTONHANDLER_TUNE(void); -static void FRONTPANEL_BUTTONHANDLER_RF_POWER(void); -static void FRONTPANEL_BUTTONHANDLER_BW(void); -static void FRONTPANEL_BUTTONHANDLER_HPF(void); -static void FRONTPANEL_BUTTONHANDLER_MENU(void); -static void FRONTPANEL_BUTTONHANDLER_LOCK(void); -static void FRONTPANEL_BUTTONHANDLER_VOLUME(void); - -static bool FRONTPanel_MCP3008_1_Enabled = true; - -static int32_t ENCODER_slowler = 0; -static uint32_t ENCODER_AValDeb = 0; -static uint32_t ENCODER2_AValDeb = 0; - -static bool enc2_func_mode = false; //false - fast-step, true - func mode (WPM, etc...) - -static PERIPH_FrontPanel_Button PERIPH_FrontPanel_Static_Buttons[] = { - {.port = 1, .channel = 7, .name = "", .state = false, .prev_state = false, .work_in_menu = false, .clickHandler = NULL, .holdHandler = NULL}, //not used - {.port = 1, .channel = 6, .name = "", .state = false, .prev_state = false, .work_in_menu = false, .clickHandler = NULL, .holdHandler = NULL}, //not used - {.port = 1, .channel = 5, .name = "MODE", .state = false, .prev_state = false, .work_in_menu = true, .clickHandler = FRONTPANEL_BUTTONHANDLER_MODE_N, .holdHandler = FRONTPANEL_BUTTONHANDLER_MODE_P}, //SB6 - {.port = 1, .channel = 0, .name = "BAND", .state = false, .prev_state = false, .work_in_menu = false, .clickHandler = FRONTPANEL_BUTTONHANDLER_BAND_P, .holdHandler = FRONTPANEL_BUTTONHANDLER_BAND_N}, //SB1 -}; - -static PERIPH_FrontPanel_Button PERIPH_FrontPanel_BottomScroll_Buttons[BOTTOM_SCROLLBUTTONS_GROUPS_COUNT][4] = { - { - {.port = 1, .channel = 1, .name = "PRE", .state = false, .prev_state = false, .work_in_menu = false, .clickHandler = FRONTPANEL_BUTTONHANDLER_PRE, .holdHandler = FRONTPANEL_BUTTONHANDLER_PRE}, //SB2 - {.port = 1, .channel = 2, .name = "ATT", .state = false, .prev_state = false, .work_in_menu = false, .clickHandler = FRONTPANEL_BUTTONHANDLER_ATT, .holdHandler = FRONTPANEL_BUTTONHANDLER_ATTHOLD}, //SB3 - {.port = 1, .channel = 3, .name = "BW", .state = false, .prev_state = false, .work_in_menu = true, .clickHandler = FRONTPANEL_BUTTONHANDLER_BW, .holdHandler = FRONTPANEL_BUTTONHANDLER_HPF}, //SB4 - {.port = 1, .channel = 4, .name = "A/B", .state = false, .prev_state = false, .work_in_menu = false, .clickHandler = FRONTPANEL_BUTTONHANDLER_AsB, .holdHandler = FRONTPANEL_BUTTONHANDLER_ArB}, //SB5 - }, - { - {.port = 1, .channel = 1, .name = "POWER", .state = false, .prev_state = false, .work_in_menu = true, .clickHandler = FRONTPANEL_BUTTONHANDLER_RF_POWER, .holdHandler = FRONTPANEL_BUTTONHANDLER_RF_POWER}, //SB2 - {.port = 1, .channel = 2, .name = "TUNE", .state = false, .prev_state = false, .work_in_menu = true, .clickHandler = FRONTPANEL_BUTTONHANDLER_TUNE, .holdHandler = FRONTPANEL_BUTTONHANDLER_TUNE}, //SB3 - {.port = 1, .channel = 3, .name = "NOTCH", .state = false, .prev_state = false, .work_in_menu = false, .clickHandler = FRONTPANEL_BUTTONHANDLER_NOTCH, .holdHandler = FRONTPANEL_BUTTONHANDLER_NOTCH}, //SB4 - {.port = 1, .channel = 4, .name = "FAST", .state = false, .prev_state = false, .work_in_menu = false, .clickHandler = FRONTPANEL_BUTTONHANDLER_FAST, .holdHandler = FRONTPANEL_BUTTONHANDLER_FAST}, //SB5 - }, - { - {.port = 1, .channel = 1, .name = "AGC", .state = false, .prev_state = false, .work_in_menu = true, .clickHandler = FRONTPANEL_BUTTONHANDLER_AGC, .holdHandler = FRONTPANEL_BUTTONHANDLER_AGC_SPEED}, //SB2 - {.port = 1, .channel = 2, .name = "CLAR", .state = false, .prev_state = false, .work_in_menu = false, .clickHandler = FRONTPANEL_BUTTONHANDLER_CLAR, .holdHandler = FRONTPANEL_BUTTONHANDLER_CLAR}, //SB3 - {.port = 1, .channel = 3, .name = "MUTE", .state = false, .prev_state = false, .work_in_menu = false, .clickHandler = FRONTPANEL_BUTTONHANDLER_MUTE, .holdHandler = FRONTPANEL_BUTTONHANDLER_MUTE}, //SB4 - {.port = 1, .channel = 4, .name = "LOCK", .state = false, .prev_state = false, .work_in_menu = false, .clickHandler = FRONTPANEL_BUTTONHANDLER_LOCK, .holdHandler = FRONTPANEL_BUTTONHANDLER_LOCK}, //SB5 - }, - { - {.port = 1, .channel = 1, .name = "VOLUME", .state = false, .prev_state = false, .work_in_menu = true, .clickHandler = FRONTPANEL_BUTTONHANDLER_VOLUME, .holdHandler = FRONTPANEL_BUTTONHANDLER_VOLUME}, //SB2 - {.port = 1, .channel = 2, .name = "BANDMAP", .state = false, .prev_state = false, .work_in_menu = false, .clickHandler = FRONTPANEL_BUTTONHANDLER_BANDMAP, .holdHandler = FRONTPANEL_BUTTONHANDLER_BANDMAP}, //SB3 - {.port = 1, .channel = 3, .name = "WPM", .state = false, .prev_state = false, .work_in_menu = true, .clickHandler = FRONTPANEL_BUTTONHANDLER_WPM, .holdHandler = FRONTPANEL_BUTTONHANDLER_WPM}, //SB4 - {.port = 1, .channel = 4, .name = "KEYER", .state = false, .prev_state = false, .work_in_menu = false, .clickHandler = FRONTPANEL_BUTTONHANDLER_KEYER, .holdHandler = FRONTPANEL_BUTTONHANDLER_KEYER}, //SB5 - }, -}; - -PERIPH_FrontPanel_Button* PERIPH_FrontPanel_BottomScroll_Buttons_Active = PERIPH_FrontPanel_BottomScroll_Buttons[0]; -int8_t PERIPH_FrontPanel_BottomScroll_index = 0; - -void FRONTPANEL_ENCODER_checkRotate(void) -{ - static uint32_t ENCstartMeasureTime = 0; - static int16_t ENCticksInInterval = 0; - static float32_t ENCAcceleration = 0; - static uint8_t ENClastClkVal = 0; - static bool ENCfirst = true; - uint8_t ENCODER_DTVal = HAL_GPIO_ReadPin(ENC_DT_GPIO_Port, ENC_DT_Pin); - uint8_t ENCODER_CLKVal = HAL_GPIO_ReadPin(ENC_CLK_GPIO_Port, ENC_CLK_Pin); - - if (ENCfirst) - { - ENClastClkVal = ENCODER_CLKVal; - ENCfirst = false; - } - if ((HAL_GetTick() - ENCODER_AValDeb) < CALIBRATE.ENCODER_DEBOUNCE) - return; - - if (ENClastClkVal != ENCODER_CLKVal) - { - if (!CALIBRATE.ENCODER_ON_FALLING || ENCODER_CLKVal == 0) - { - if (ENCODER_DTVal != ENCODER_CLKVal) - { // If pin A changed first - clockwise rotation - ENCODER_slowler--; - if (ENCODER_slowler <= -CALIBRATE.ENCODER_SLOW_RATE) - { - //acceleration - ENCticksInInterval++; - if((HAL_GetTick() - ENCstartMeasureTime) > ENCODER_ACCELERATION) - { - ENCstartMeasureTime = HAL_GetTick(); - ENCAcceleration = (10.0f + ENCticksInInterval - 1.0f) / 10.0f; - ENCticksInInterval = 0; - } - //do rotate - FRONTPANEL_ENCODER_Rotated(CALIBRATE.ENCODER_INVERT ? ENCAcceleration : -ENCAcceleration); - ENCODER_slowler = 0; - } - } - else - { // otherwise B changed its state first - counterclockwise rotation - ENCODER_slowler++; - if (ENCODER_slowler >= CALIBRATE.ENCODER_SLOW_RATE) - { - //acceleration - ENCticksInInterval++; - if((HAL_GetTick() - ENCstartMeasureTime) > ENCODER_ACCELERATION) - { - ENCstartMeasureTime = HAL_GetTick(); - ENCAcceleration = (10.0f + ENCticksInInterval - 1.0f) / 10.0f; - ENCticksInInterval = 0; - } - //do rotate - FRONTPANEL_ENCODER_Rotated(CALIBRATE.ENCODER_INVERT ? -ENCAcceleration : ENCAcceleration); - ENCODER_slowler = 0; - } - } - } - ENCODER_AValDeb = HAL_GetTick(); - ENClastClkVal = ENCODER_CLKVal; - } -} - -void FRONTPANEL_ENCODER2_checkRotate(void) -{ - uint8_t ENCODER2_DTVal = HAL_GPIO_ReadPin(ENC2_DT_GPIO_Port, ENC2_DT_Pin); - uint8_t ENCODER2_CLKVal = HAL_GPIO_ReadPin(ENC2_CLK_GPIO_Port, ENC2_CLK_Pin); - - if ((HAL_GetTick() - ENCODER2_AValDeb) < CALIBRATE.ENCODER2_DEBOUNCE) - return; - - if (!CALIBRATE.ENCODER_ON_FALLING || ENCODER2_CLKVal == 0) - { - if (ENCODER2_DTVal != ENCODER2_CLKVal) - { // If pin A changed first - clockwise rotation - FRONTPANEL_ENCODER2_Rotated(CALIBRATE.ENCODER2_INVERT ? 1 : -1); - } - else - { // otherwise B changed its state first - counterclockwise rotation - FRONTPANEL_ENCODER2_Rotated(CALIBRATE.ENCODER2_INVERT ? -1 : 1); - } - } - ENCODER2_AValDeb = HAL_GetTick(); -} - -static void FRONTPANEL_ENCODER_Rotated(float32_t direction) // rotated encoder, handler here, direction -1 - left, 1 - right -{ - if (TRX.Locked) - return; - if (LCD_systemMenuOpened) - { - eventRotateSystemMenu((int8_t)direction); - return; - } - if(fabsf(direction) <= ENCODER_MIN_RATE_ACCELERATION) - direction = (direction < 0.0f)? -1.0f : 1.0f; - - VFO *vfo = CurrentVFO(); - uint32_t newfreq = 0; - if (TRX.Fast) - { - newfreq = (uint32_t)((int32_t)vfo->Freq + (int32_t)((float32_t)TRX.FRQ_FAST_STEP * direction)); - if ((vfo->Freq % TRX.FRQ_FAST_STEP) > 0 && fabsf(direction) <= 1.0f) - newfreq = vfo->Freq / TRX.FRQ_FAST_STEP * TRX.FRQ_FAST_STEP; - } - else - { - newfreq = (uint32_t)((int32_t)vfo->Freq + (int32_t)((float32_t)TRX.FRQ_STEP * direction)); - if ((vfo->Freq % TRX.FRQ_STEP) > 0 && fabsf(direction) <= 1.0f) - newfreq = vfo->Freq / TRX.FRQ_STEP * TRX.FRQ_STEP; - } - TRX_setFrequency(newfreq, vfo); - LCD_UpdateQuery.FreqInfo = true; - NeedSaveSettings = true; -} - -static void FRONTPANEL_ENCODER2_Rotated(int8_t direction) // rotated encoder, handler here, direction -1 - left, 1 - right -{ - if (TRX.Locked) - return; - - if (LCD_systemMenuOpened) - { - eventSecRotateSystemMenu(direction); - return; - } - else - { - PERIPH_FrontPanel_BottomScroll_index += direction; - if(PERIPH_FrontPanel_BottomScroll_index < 0) - PERIPH_FrontPanel_BottomScroll_index = BOTTOM_SCROLLBUTTONS_GROUPS_COUNT - 1; - if(PERIPH_FrontPanel_BottomScroll_index >= BOTTOM_SCROLLBUTTONS_GROUPS_COUNT) - PERIPH_FrontPanel_BottomScroll_index = 0; - PERIPH_FrontPanel_BottomScroll_Buttons_Active = PERIPH_FrontPanel_BottomScroll_Buttons[PERIPH_FrontPanel_BottomScroll_index]; - LCD_UpdateQuery.TopButtons = true; - } -} - -void FRONTPANEL_check_ENC2SW(void) -{ - static bool ENC2SW_Last = true; - - if (TRX.Locked) - return; - - bool ENC2SW_Now = HAL_GPIO_ReadPin(ENC2_SW_GPIO_Port, ENC2_SW_Pin); - if (ENC2SW_Last != ENC2SW_Now) - { - ENC2SW_Last = ENC2SW_Now; - if (!ENC2SW_Now) - { - FRONTPANEL_BUTTONHANDLER_MENU(); - } - } -} - -void FRONTPANEL_Init(void) -{ - uint16_t test_value = FRONTPANEL_ReadMCP3008_Value(0, AD1_CS_GPIO_Port, AD1_CS_Pin); - if (test_value == 65535) - { - FRONTPanel_MCP3008_1_Enabled = false; - sendToDebug_strln("[ERR] Frontpanel MCP3008 - 1 not found, disabling... (FPGA SPI/I2S CLOCK ERROR?)"); - LCD_showError("MCP3008 - 1 init error (FPGA I2S CLK?)", true); - } - FRONTPANEL_Process(); -} - -void FRONTPANEL_Process(void) -{ - if (SPI_process) - return; - SPI_process = true; - - FRONTPANEL_check_ENC2SW(); - uint16_t buttons_count = sizeof(PERIPH_FrontPanel_Static_Buttons) / sizeof(PERIPH_FrontPanel_Button); - uint16_t mcp3008_value = 0; - bool process_static_buttons = true; - - //process buttons - PERIPH_FrontPanel_Button* PERIPH_FrontPanel_Buttons = PERIPH_FrontPanel_Static_Buttons; - for (int16_t b = 0; b < buttons_count; b++) - { - //check disabled ports - if (PERIPH_FrontPanel_Buttons[b].port == 1 && !FRONTPanel_MCP3008_1_Enabled) - continue; - - //get state from ADC MCP3008 (10bit - 1024values) - if (PERIPH_FrontPanel_Buttons[b].port == 1) - mcp3008_value = FRONTPANEL_ReadMCP3008_Value(PERIPH_FrontPanel_Buttons[b].channel, AD1_CS_GPIO_Port, AD1_CS_Pin); - - /*sendToDebug_str("port: "); - sendToDebug_uint8(PERIPH_FrontPanel_Buttons[b].port, true); - sendToDebug_str("channel: "); - sendToDebug_uint8(PERIPH_FrontPanel_Buttons[b].channel, true); - sendToDebug_str("value: "); - sendToDebug_uint16(mcp3008_value, false);*/ - - //set state - if (mcp3008_value < MCP3008_THRESHOLD) - PERIPH_FrontPanel_Buttons[b].state = true; - else - PERIPH_FrontPanel_Buttons[b].state = false; - - //check state - if ((PERIPH_FrontPanel_Buttons[b].prev_state != PERIPH_FrontPanel_Buttons[b].state) && PERIPH_FrontPanel_Buttons[b].state) - { - PERIPH_FrontPanel_Buttons[b].start_hold_time = HAL_GetTick(); - PERIPH_FrontPanel_Buttons[b].afterhold = false; - } - - //check hold state - if ((PERIPH_FrontPanel_Buttons[b].prev_state == PERIPH_FrontPanel_Buttons[b].state) && PERIPH_FrontPanel_Buttons[b].state && ((HAL_GetTick() - PERIPH_FrontPanel_Buttons[b].start_hold_time) > KEY_HOLD_TIME) && !PERIPH_FrontPanel_Buttons[b].afterhold) - { - PERIPH_FrontPanel_Buttons[b].afterhold = true; - if (!TRX.Locked || (PERIPH_FrontPanel_Buttons[b].clickHandler == FRONTPANEL_BUTTONHANDLER_LOCK)) //LOCK BUTTON - if (!LCD_systemMenuOpened || PERIPH_FrontPanel_Buttons[b].work_in_menu) - if (PERIPH_FrontPanel_Buttons[b].holdHandler != NULL) - { - WM8731_Beep(); - PERIPH_FrontPanel_Buttons[b].holdHandler(); - } - } - - //check click state - if ((PERIPH_FrontPanel_Buttons[b].prev_state != PERIPH_FrontPanel_Buttons[b].state) && !PERIPH_FrontPanel_Buttons[b].state && ((HAL_GetTick() - PERIPH_FrontPanel_Buttons[b].start_hold_time) < KEY_HOLD_TIME) && !PERIPH_FrontPanel_Buttons[b].afterhold && !TRX.Locked) - { - if (!LCD_systemMenuOpened || PERIPH_FrontPanel_Buttons[b].work_in_menu) - if (PERIPH_FrontPanel_Buttons[b].clickHandler != NULL) - { - WM8731_Beep(); - PERIPH_FrontPanel_Buttons[b].clickHandler(); - } - } - - //save prev state - PERIPH_FrontPanel_Buttons[b].prev_state = PERIPH_FrontPanel_Buttons[b].state; - - if(process_static_buttons && b == (buttons_count - 1)) - { - //repeat with dynamic buttons - process_static_buttons = false; - buttons_count = sizeof(PERIPH_FrontPanel_BottomScroll_Buttons[0]) / sizeof(PERIPH_FrontPanel_Button); - PERIPH_FrontPanel_Buttons = PERIPH_FrontPanel_BottomScroll_Buttons_Active; - b = -1; - } - } - SPI_process = false; -} - -void FRONTPANEL_BUTTONHANDLER_AsB(void) // A/B -{ - TRX_TemporaryMute(); - TRX.current_vfo = !TRX.current_vfo; - TRX_setFrequency(CurrentVFO()->Freq, CurrentVFO()); - TRX_setMode(CurrentVFO()->Mode, CurrentVFO()); - LCD_UpdateQuery.TopButtons = true; - LCD_UpdateQuery.FreqInfo = true; - LCD_UpdateQuery.StatusInfoGUI = true; - NeedSaveSettings = true; - NeedReinitAudioFilters = true; - LCD_redraw(false); -} - -void FRONTPANEL_BUTTONHANDLER_TUNE(void) -{ - TRX_Tune = !TRX_Tune; - TRX_ptt_hard = TRX_Tune; - LCD_UpdateQuery.StatusInfoGUI = true; - LCD_UpdateQuery.TopButtons = true; - NeedSaveSettings = true; - TRX_Restart_Mode(); -} - -void FRONTPANEL_BUTTONHANDLER_PRE(void) -{ - TRX.ADC_Driver = !TRX.ADC_Driver; - int8_t band = getBandFromFreq(CurrentVFO()->Freq, true); - if (band > 0) - TRX.BANDS_SAVED_SETTINGS[band].ADC_Driver = TRX.ADC_Driver; - LCD_UpdateQuery.TopButtons = true; - NeedSaveSettings = true; -} - -void FRONTPANEL_BUTTONHANDLER_ATT(void) -{ - TRX.ATT = !TRX.ATT; - - int8_t band = getBandFromFreq(CurrentVFO()->Freq, true); - if (band > 0) - { - TRX.BANDS_SAVED_SETTINGS[band].ATT = TRX.ATT; - TRX.BANDS_SAVED_SETTINGS[band].ATT_DB = TRX.ATT_DB; - } - - LCD_UpdateQuery.TopButtons = true; - NeedSaveSettings = true; -} - -void FRONTPANEL_BUTTONHANDLER_ATTHOLD(void) -{ - TRX.ATT_DB += TRX.ATT_STEP; - if (TRX.ATT_DB > 31.0f) - TRX.ATT_DB = TRX.ATT_STEP; - - int8_t band = getBandFromFreq(CurrentVFO()->Freq, true); - if (band > 0) - { - TRX.BANDS_SAVED_SETTINGS[band].ATT = TRX.ATT; - TRX.BANDS_SAVED_SETTINGS[band].ATT_DB = TRX.ATT_DB; - } - - LCD_UpdateQuery.TopButtons = true; - NeedSaveSettings = true; -} - -void FRONTPANEL_BUTTONHANDLER_FAST(void) -{ - TRX.Fast = !TRX.Fast; - LCD_UpdateQuery.TopButtons = true; - NeedSaveSettings = true; -} - -static void FRONTPANEL_BUTTONHANDLER_MODE_P(void) -{ - //enable claibration hidden menu! - if (LCD_systemMenuOpened) - { - sysmenu_hiddenmenu_enabled = true; - LCD_redraw(false); - LCD_UpdateQuery.TopButtons = true; - LCD_UpdateQuery.StatusInfoBar = true; - NeedSaveSettings = true; - return; - } - - int8_t mode = (int8_t)CurrentVFO()->Mode; - if (mode == TRX_MODE_LSB) - mode = TRX_MODE_USB; - else if (mode == TRX_MODE_USB) - mode = TRX_MODE_LSB; - else if (mode == TRX_MODE_CW_L) - mode = TRX_MODE_CW_U; - else if (mode == TRX_MODE_CW_U) - mode = TRX_MODE_CW_L; - else if (mode == TRX_MODE_NFM) - mode = TRX_MODE_WFM; - else if (mode == TRX_MODE_WFM) - mode = TRX_MODE_NFM; - else if (mode == TRX_MODE_DIGI_L) - mode = TRX_MODE_DIGI_U; - else if (mode == TRX_MODE_DIGI_U) - mode = TRX_MODE_DIGI_L; - else if (mode == TRX_MODE_AM) - mode = TRX_MODE_IQ; - else if (mode == TRX_MODE_IQ) - { - mode = TRX_MODE_LOOPBACK; - LCD_UpdateQuery.StatusInfoGUIRedraw = true; - } - else if (mode == TRX_MODE_LOOPBACK) - { - mode = TRX_MODE_AM; - LCD_UpdateQuery.StatusInfoGUIRedraw = true; - } - - TRX_setMode((uint8_t)mode, CurrentVFO()); - int8_t band = getBandFromFreq(CurrentVFO()->Freq, true); - if (band > 0) - TRX.BANDS_SAVED_SETTINGS[band].Mode = (uint8_t)mode; - TRX_Temporary_Stop_BandMap = true; -} - -static void FRONTPANEL_BUTTONHANDLER_MODE_N(void) -{ - int8_t mode = (int8_t)CurrentVFO()->Mode; - if(mode == TRX_MODE_LOOPBACK) - LCD_UpdateQuery.StatusInfoGUIRedraw = true; - if (mode == TRX_MODE_LSB) - mode = TRX_MODE_CW_L; - else if (mode == TRX_MODE_USB) - mode = TRX_MODE_CW_U; - else if (mode == TRX_MODE_CW_L || mode == TRX_MODE_CW_U) - mode = TRX_MODE_DIGI_U; - else if (mode == TRX_MODE_DIGI_L || mode == TRX_MODE_DIGI_U) - mode = TRX_MODE_NFM; - else if (mode == TRX_MODE_NFM || mode == TRX_MODE_WFM) - mode = TRX_MODE_AM; - else - { - if (CurrentVFO()->Freq < 10000000) - mode = TRX_MODE_LSB; - else - mode = TRX_MODE_USB; - } - - TRX_setMode((uint8_t)mode, CurrentVFO()); - int8_t band = getBandFromFreq(CurrentVFO()->Freq, true); - if (band > 0) - TRX.BANDS_SAVED_SETTINGS[band].Mode = (uint8_t)mode; - TRX_Temporary_Stop_BandMap = true; -} - -static void FRONTPANEL_BUTTONHANDLER_BAND_P(void) -{ - int8_t band = getBandFromFreq(CurrentVFO()->Freq, true); - band++; - if (band >= BANDS_COUNT) - band = 0; - while (!BANDS[band].selectable) - { - band++; - if (band >= BANDS_COUNT) - band = 0; - } - - TRX_setFrequency(TRX.BANDS_SAVED_SETTINGS[band].Freq, CurrentVFO()); - TRX_setMode(TRX.BANDS_SAVED_SETTINGS[band].Mode, CurrentVFO()); - TRX.ATT = TRX.BANDS_SAVED_SETTINGS[band].ATT; - TRX.ATT_DB = TRX.BANDS_SAVED_SETTINGS[band].ATT_DB; - TRX.ADC_Driver = TRX.BANDS_SAVED_SETTINGS[band].ADC_Driver; - TRX.FM_SQL_threshold = TRX.BANDS_SAVED_SETTINGS[band].FM_SQL_threshold; - TRX_AutoGain_Stage = TRX.BANDS_SAVED_SETTINGS[band].AutoGain_Stage; - CurrentVFO()->AGC = TRX.BANDS_SAVED_SETTINGS[band].AGC; - TRX_Temporary_Stop_BandMap = false; - - LCD_UpdateQuery.TopButtons = true; - LCD_UpdateQuery.FreqInfo = true; -} - -static void FRONTPANEL_BUTTONHANDLER_BAND_N(void) -{ - int8_t band = getBandFromFreq(CurrentVFO()->Freq, true); - band--; - if (band < 0) - band = BANDS_COUNT - 1; - while (!BANDS[band].selectable) - { - band--; - if (band < 0) - band = BANDS_COUNT - 1; - } - - TRX_setFrequency(TRX.BANDS_SAVED_SETTINGS[band].Freq, CurrentVFO()); - TRX_setMode(TRX.BANDS_SAVED_SETTINGS[band].Mode, CurrentVFO()); - TRX.ATT = TRX.BANDS_SAVED_SETTINGS[band].ATT; - TRX.ATT_DB = TRX.BANDS_SAVED_SETTINGS[band].ATT_DB; - TRX.ADC_Driver = TRX.BANDS_SAVED_SETTINGS[band].ADC_Driver; - TRX.FM_SQL_threshold = TRX.BANDS_SAVED_SETTINGS[band].FM_SQL_threshold; - TRX_AutoGain_Stage = TRX.BANDS_SAVED_SETTINGS[band].AutoGain_Stage; - CurrentVFO()->AGC = TRX.BANDS_SAVED_SETTINGS[band].AGC; - TRX_Temporary_Stop_BandMap = false; - - LCD_UpdateQuery.TopButtons = true; - LCD_UpdateQuery.FreqInfo = true; -} - -void FRONTPANEL_BUTTONHANDLER_RF_POWER(void) -{ - if (!LCD_systemMenuOpened) - { - LCD_systemMenuOpened = true; - SYSMENU_TRX_RFPOWER_HOTKEY(); - } - else - { - eventCloseAllSystemMenu(); - } - LCD_redraw(false); -} - -void FRONTPANEL_BUTTONHANDLER_AGC(void) -{ - CurrentVFO()->AGC = !CurrentVFO()->AGC; - int8_t band = getBandFromFreq(CurrentVFO()->Freq, true); - if (band > 0) - TRX.BANDS_SAVED_SETTINGS[band].AGC = CurrentVFO()->AGC; - LCD_UpdateQuery.TopButtons = true; - NeedSaveSettings = true; -} - -void FRONTPANEL_BUTTONHANDLER_AGC_SPEED(void) -{ - if (!LCD_systemMenuOpened) - { - LCD_systemMenuOpened = true; - SYSMENU_AUDIO_AGC_HOTKEY(); - } - else - { - eventCloseAllSystemMenu(); - } - LCD_redraw(false); -} - -static void FRONTPANEL_BUTTONHANDLER_SQUELCH(void) -{ - if (!LCD_systemMenuOpened) - { - LCD_systemMenuOpened = true; - SYSMENU_AUDIO_SQUELCH_HOTKEY(); - } - else - { - eventCloseAllSystemMenu(); - } - LCD_redraw(false); -} - -static void FRONTPANEL_BUTTONHANDLER_WPM(void) -{ - if (!LCD_systemMenuOpened) - { - LCD_systemMenuOpened = true; - SYSMENU_CW_WPM_HOTKEY(); - } - else - { - eventCloseAllSystemMenu(); - } - LCD_redraw(false); -} - -static void FRONTPANEL_BUTTONHANDLER_KEYER(void) -{ - TRX.CW_KEYER = !TRX.CW_KEYER; - if(TRX.CW_KEYER) - LCD_showTooltip("KEYER ON"); - else - LCD_showTooltip("KEYER OFF"); -} - -static void FRONTPANEL_BUTTONHANDLER_STEP(void) -{ - if (!LCD_systemMenuOpened) - { - LCD_systemMenuOpened = true; - SYSMENU_TRX_STEP_HOTKEY(); - } - else - { - eventCloseAllSystemMenu(); - } - LCD_redraw(false); -} - -void FRONTPANEL_BUTTONHANDLER_BW(void) -{ - if (!LCD_systemMenuOpened) - { - LCD_systemMenuOpened = true; - if (CurrentVFO()->Mode == TRX_MODE_CW_L || CurrentVFO()->Mode == TRX_MODE_CW_U) - SYSMENU_AUDIO_BW_CW_HOTKEY(); - else if (CurrentVFO()->Mode == TRX_MODE_NFM || CurrentVFO()->Mode == TRX_MODE_WFM) - SYSMENU_AUDIO_BW_FM_HOTKEY(); - else if (CurrentVFO()->Mode == TRX_MODE_AM) - SYSMENU_AUDIO_BW_AM_HOTKEY(); - else - SYSMENU_AUDIO_BW_SSB_HOTKEY(); - } - else - { - eventCloseAllSystemMenu(); - } - LCD_redraw(false); -} - -void FRONTPANEL_BUTTONHANDLER_VOLUME(void) -{ - if (!LCD_systemMenuOpened) - { - LCD_systemMenuOpened = true; - SYSMENU_AUDIO_VOLUME_HOTKEY(); - } - else - { - eventCloseAllSystemMenu(); - } - LCD_redraw(false); -} - -void FRONTPANEL_BUTTONHANDLER_HPF(void) -{ - if (!LCD_systemMenuOpened) - { - LCD_systemMenuOpened = true; - if (CurrentVFO()->Mode == TRX_MODE_CW_L || CurrentVFO()->Mode == TRX_MODE_CW_U) - SYSMENU_AUDIO_HPF_CW_HOTKEY(); - else - SYSMENU_AUDIO_HPF_SSB_HOTKEY(); - } - else - { - eventCloseAllSystemMenu(); - } - LCD_redraw(false); -} - -void FRONTPANEL_BUTTONHANDLER_ArB(void) //A=B -{ - if (TRX.current_vfo) - memcpy(&TRX.VFO_A, &TRX.VFO_B, sizeof TRX.VFO_B); - else - memcpy(&TRX.VFO_B, &TRX.VFO_A, sizeof TRX.VFO_B); - - LCD_showTooltip("VFO COPIED"); - - LCD_UpdateQuery.TopButtons = true; - LCD_UpdateQuery.FreqInfo = true; - NeedSaveSettings = true; -} - -void FRONTPANEL_BUTTONHANDLER_NOTCH(void) -{ - TRX_TemporaryMute(); - - if (CurrentVFO()->NotchFC > CurrentVFO()->LPF_Filter_Width) - { - CurrentVFO()->NotchFC = CurrentVFO()->LPF_Filter_Width; - } - - if (!CurrentVFO()->AutoNotchFilter) - { - InitAutoNotchReduction(); - CurrentVFO()->AutoNotchFilter = true; - } - else - CurrentVFO()->AutoNotchFilter = false; - - LCD_UpdateQuery.StatusInfoGUI = true; - LCD_UpdateQuery.TopButtons = true; - NeedSaveSettings = true; -} - -void FRONTPANEL_BUTTONHANDLER_NOTCH_MANUAL(void) -{ - if (CurrentVFO()->NotchFC > CurrentVFO()->LPF_Filter_Width) - CurrentVFO()->NotchFC = CurrentVFO()->LPF_Filter_Width; - CurrentVFO()->AutoNotchFilter = false; - - LCD_UpdateQuery.TopButtons = true; - LCD_UpdateQuery.StatusInfoGUI = true; - NeedSaveSettings = true; -} - -static void FRONTPANEL_BUTTONHANDLER_SHIFT(void) -{ - TRX.ShiftEnabled = !TRX.ShiftEnabled; - LCD_UpdateQuery.TopButtons = true; - NeedSaveSettings = true; -} - -static void FRONTPANEL_BUTTONHANDLER_CLAR(void) -{ - TRX.CLAR = !TRX.CLAR; - LCD_UpdateQuery.TopButtons = true; - NeedSaveSettings = true; -} - -void FRONTPANEL_BUTTONHANDLER_LOCK(void) -{ - if (!LCD_systemMenuOpened) - TRX.Locked = !TRX.Locked; - LCD_UpdateQuery.TopButtons = true; - LCD_UpdateQuery.StatusInfoBar = true; - NeedSaveSettings = true; -} - -static void FRONTPANEL_BUTTONHANDLER_HIDDEN_ENABLE(void) -{ - if (LCD_systemMenuOpened) - { - sysmenu_hiddenmenu_enabled = true; - LCD_redraw(false); - } - LCD_UpdateQuery.TopButtons = true; - LCD_UpdateQuery.StatusInfoBar = true; - NeedSaveSettings = true; -} - -void FRONTPANEL_BUTTONHANDLER_MENU(void) -{ - if (!LCD_systemMenuOpened) - LCD_systemMenuOpened = true; - else - eventCloseSystemMenu(); - LCD_redraw(false); -} - -void FRONTPANEL_BUTTONHANDLER_MUTE(void) -{ - TRX_Mute = !TRX_Mute; - LCD_UpdateQuery.TopButtons = true; - NeedSaveSettings = true; -} - -static void FRONTPANEL_BUTTONHANDLER_BANDMAP(void) -{ - TRX.BandMapEnabled = !TRX.BandMapEnabled; - - if(TRX.BandMapEnabled) - LCD_showTooltip("BANDMAP ON"); - else - LCD_showTooltip("BANDMAP OFF"); - - LCD_UpdateQuery.TopButtons = true; - NeedSaveSettings = true; -} - -static uint16_t FRONTPANEL_ReadMCP3008_Value(uint8_t channel, GPIO_TypeDef *CS_PORT, uint16_t CS_PIN) -{ - uint8_t outData[3] = {0}; - uint8_t inData[3] = {0}; - uint16_t mcp3008_value = 0; - - outData[0] = 0x18 | channel; - bool res = SPI_Transmit(outData, inData, 3, CS_PORT, CS_PIN, false, SPI_FRONT_UNIT_PRESCALER); - if (res == false) - return 65535; - mcp3008_value = (uint16_t)(0 | ((inData[1] & 0x3F) << 4) | (inData[2] & 0xF0 >> 4)); - - //sendToDebug_uint16(mcp3008_value, false); - return mcp3008_value; -} diff --git a/Src/front_unit.h b/Src/front_unit.h deleted file mode 100644 index 8afea63..0000000 --- a/Src/front_unit.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef FRONT_UNIT_h -#define FRONT_UNIT_h - -#include "stm32f4xx_hal.h" -#include - -#define MCP3008_THRESHOLD 100 -#define BOTTOM_SCROLLBUTTONS_GROUPS_COUNT 4 - -typedef struct -{ - uint8_t port; - uint8_t channel; - bool state; - bool prev_state; - uint32_t start_hold_time; - bool afterhold; - bool work_in_menu; - char name[16]; - void (*clickHandler)(void); - void (*holdHandler)(void); -} PERIPH_FrontPanel_Button; - -extern PERIPH_FrontPanel_Button* PERIPH_FrontPanel_BottomScroll_Buttons_Active; - -extern void FRONTPANEL_ENCODER_checkRotate(void); -extern void FRONTPANEL_ENCODER2_checkRotate(void); -extern void FRONTPANEL_check_ENC2SW(void); -extern void FRONTPANEL_Init(void); -extern void FRONTPANEL_Process(void); - -#endif diff --git a/Src/functions.c b/Src/functions.c deleted file mode 100644 index 581be14..0000000 --- a/Src/functions.c +++ /dev/null @@ -1,447 +0,0 @@ -#include "functions.h" -#include "stm32f4xx_hal.h" -#include -#include -#include -#include -#include "arm_math.h" -#include "fpga.h" -#include "trx_manager.h" -#include "usbd_debug_if.h" -#include "usbd_cat_if.h" -#include "lcd.h" - -CPULOAD_t CPU_LOAD = {0}; -static bool SPI_busy = false; -volatile bool SPI_process = false; - -void dma_memcpy32(uint32_t *dest, uint32_t *src, uint32_t len) -{ - if (len == 0) - return; - HAL_DMA_Start(&hdma_memtomem_dma2_stream0, (uint32_t)src, (uint32_t)dest, len); - HAL_DMA_PollForTransfer(&hdma_memtomem_dma2_stream0, HAL_DMA_FULL_TRANSFER, HAL_MAX_DELAY); -} - -void readFromCircleBuffer32(uint32_t *source, uint32_t *dest, uint32_t index, uint32_t length, uint32_t words_to_read) -{ - if (index >= words_to_read) - { - dma_memcpy32(&dest[0], &source[index - words_to_read], words_to_read); - } - else - { - uint_fast16_t prev_part = words_to_read - index; - dma_memcpy32(&dest[0], &source[length - prev_part], prev_part); - dma_memcpy32(&dest[prev_part], &source[0], (words_to_read - prev_part)); - } -} - -void readHalfFromCircleUSBBuffer24Bit(uint8_t *source, int32_t *dest, uint32_t index, uint32_t length) -{ - uint_fast16_t halflen = length / 2; - uint_fast16_t readed_index = 0; - if (index >= halflen) - { - for (uint_fast16_t i = (index - halflen); i < index; i++) - { - dest[readed_index] = (source[i * 3 + 0] << 8) | (source[i * 3 + 1] << 16) | (source[i * 3 + 2] << 24); - readed_index++; - } - } - else - { - uint_fast16_t prev_part = halflen - index; - for (uint_fast16_t i = (length - prev_part); i < length; i++) - { - dest[readed_index] = (source[i * 3 + 0] << 8) | (source[i * 3 + 1] << 16) | (source[i * 3 + 2] << 24); - readed_index++; - } - for (uint_fast16_t i = 0; i < (halflen - prev_part); i++) - { - dest[readed_index] = (source[i * 3 + 0] << 8) | (source[i * 3 + 1] << 16) | (source[i * 3 + 2] << 24); - readed_index++; - } - } -} - -void sendToDebug_str(char *data) -{ - if (SWD_DEBUG_ENABLED) - printf("%s", data); - if (USB_DEBUG_ENABLED) - DEBUG_Transmit_FIFO((uint8_t *)data, (uint16_t)strlen(data)); - if (LCD_DEBUG_ENABLED) - { - static uint16_t dbg_lcd_y = 10; - LCDDriver_printText(data, 0, dbg_lcd_y, COLOR_RED, BG_COLOR, 1); - dbg_lcd_y += 9; - if(dbg_lcd_y >= LCD_HEIGHT) - dbg_lcd_y = 0; - } -} - -void sendToDebug_strln(char *data) -{ - sendToDebug_str(data); - sendToDebug_newline(); -} - -void sendToDebug_str2(char *data1, char *data2) -{ - sendToDebug_str(data1); - sendToDebug_str(data2); -} - -void sendToDebug_str3(char *data1, char *data2, char *data3) -{ - sendToDebug_str(data1); - sendToDebug_str(data2); - sendToDebug_str(data3); -} - -void sendToDebug_newline(void) -{ - sendToDebug_str("\n"); -} - -void sendToDebug_flush(void) -{ - uint_fast16_t tryes = 0; - while (DEBUG_Transmit_FIFO_Events() == USBD_BUSY && tryes < 512) - tryes++; -} - -void sendToDebug_uint8(uint8_t data, bool _inline) -{ - char tmp[50] = ""; //-V808 - if (_inline) - sprintf(tmp, "%d", data); - else - sprintf(tmp, "%d\n", data); - sendToDebug_str(tmp); -} - -void sendToDebug_hex(uint8_t data, bool _inline) -{ - char tmp[50] = ""; //-V808 - if (_inline) - sprintf(tmp, "%02X", data); - else - sprintf(tmp, "%02X\n", data); - sendToDebug_str(tmp); -} - -void sendToDebug_uint16(uint16_t data, bool _inline) -{ - char tmp[50] = ""; //-V808 - if (_inline) - sprintf(tmp, "%d", data); - else - sprintf(tmp, "%d\n", data); - sendToDebug_str(tmp); -} -void sendToDebug_uint32(uint32_t data, bool _inline) -{ - char tmp[50] = ""; //-V808 - if (_inline) - sprintf(tmp, "%u", data); - else - sprintf(tmp, "%u\n", data); - sendToDebug_str(tmp); -} -void sendToDebug_int8(int8_t data, bool _inline) -{ - char tmp[50] = ""; //-V808 - if (_inline) - sprintf(tmp, "%d", data); - else - sprintf(tmp, "%d\n", data); - sendToDebug_str(tmp); -} -void sendToDebug_int16(int16_t data, bool _inline) -{ - char tmp[50] = ""; //-V808 - if (_inline) - sprintf(tmp, "%d", data); - else - sprintf(tmp, "%d\n", data); - sendToDebug_str(tmp); -} -void sendToDebug_int32(int32_t data, bool _inline) -{ - char tmp[50] = ""; //-V808 - if (_inline) - sprintf(tmp, "%d", data); - else - sprintf(tmp, "%d\n", data); - sendToDebug_str(tmp); -} - -void sendToDebug_float32(float32_t data, bool _inline) -{ - char tmp[50] = ""; //-V808 - if (_inline) - sprintf(tmp, "%f", (double)data); - else - sprintf(tmp, "%f\n", (double)data); - sendToDebug_str(tmp); -} - -uint32_t getRXPhraseFromFrequency(int32_t freq) // calculate the frequency from the phrase for FPGA (RX1 / RX2) -{ - if (freq < 0) - return 0; - bool inverted = false; - int32_t _freq = freq; - if (_freq > ADC_CLOCK / 2) //Go Nyquist - { - while (_freq > (ADC_CLOCK / 2)) - { - _freq -= (ADC_CLOCK / 2); - inverted = !inverted; - } - if (inverted) - { - _freq = (ADC_CLOCK / 2) - _freq; - } - } - TRX_RX_IQ_swap = inverted; - double res = round(((double)_freq / ADC_CLOCK) * 4194304); //freq in hz/oscil in hz*2^bits; - return (uint32_t)res; -} - -uint32_t getTXPhraseFromFrequency(int32_t freq) // calculate the frequency from the phrase for FPGA (TX) -{ - if (freq < 0) - return 0; - bool inverted = false; - TRX_TX_IQ_swap = false; - double res = round(((double)freq / DAC_CLOCK) * 4194304); //freq in hz/oscil in hz*2^bits = (freq/48000000)*4194304; - return (uint32_t)res; -} - -void addSymbols(char *dest, char *str, uint_fast8_t length, char *symbol, bool toEnd) // add zeroes -{ - char res[50] = ""; - strcpy(res, str); - while (strlen(res) < length) - { - if (toEnd) - strcat(res, symbol); - else - { - char tmp[50] = ""; - strcat(tmp, symbol); - strcat(tmp, res); - strcpy(res, tmp); - } - } - strcpy(dest, res); -} - -float32_t log10f_fast(float32_t X) -{ - float32_t Y, F; - int32_t E; - F = frexpf(fabsf(X), &E); - Y = 1.23149591368684f; - Y *= F; - Y += -4.11852516267426f; - Y *= F; - Y += 6.02197014179219f; - Y *= F; - Y += -3.13396450166353f; - Y += E; - return (Y * 0.3010299956639812f); -} - -float32_t db2rateV(float32_t i) // from decibels to times (for voltage) -{ - return powf(10.0f, (i / 20.0f)); -} - -float32_t db2rateP(float32_t i) // from decibels to times (for power) -{ - return powf(10.0f, (i / 10.0f)); -} - -float32_t rate2dbV(float32_t i) // times to decibels (for voltage) -{ - return 20 * log10f_fast(i); -} - -float32_t rate2dbP(float32_t i) // from times to decibels (for power) -{ - return 10 * log10f_fast(i); -} - -#define VOLUME_LOW_DB (-40.0f) -#define VOLUME_EPSILON powf(10.0f, (VOLUME_LOW_DB / 20.0f)) -float32_t volume2rate(float32_t i) // from the position of the volume knob to the gain -{ - if (i < (2.0f / 100.f)) //mute zone - return 0.0f; - return powf(VOLUME_EPSILON, (1.0f - i)); -} - -void shiftTextLeft(char *string, uint_fast16_t shiftLength) -{ - uint_fast16_t size = strlen(string); - if (shiftLength >= size) - { - memset(string, '\0', size); - return; - } - for (uint_fast16_t i = 0; i < size - shiftLength; i++) - { - string[i] = string[i + shiftLength]; - string[i + shiftLength] = '\0'; - } -} - -float32_t getMaxTXAmplitudeOnFreq(uint32_t freq) -{ - if (freq > MAX_TX_FREQ_HZ) - return 0.0f; - - uint8_t nyquist = freq / (DAC_CLOCK / 2); - if (nyquist == 0) - { - if(freq < 2000000) - return (float32_t)CALIBRATE.rf_out_power_lf / 100.0f * (float32_t)MAX_TX_AMPLITUDE; - if(freq < 5000000) - return (float32_t)CALIBRATE.rf_out_power_hf_low / 100.0f * (float32_t)MAX_TX_AMPLITUDE; - if(freq < 30000000) - return (float32_t)CALIBRATE.rf_out_power_hf / 100.0f * (float32_t)MAX_TX_AMPLITUDE; - - return (float32_t)CALIBRATE.rf_out_power_hf_high / 100.0f * (float32_t)MAX_TX_AMPLITUDE; - } - if (nyquist == 1) - return (float32_t)CALIBRATE.rf_out_power_vhf / 100.0f * (float32_t)MAX_TX_AMPLITUDE; - - return 0.0f; -} - -float32_t generateSin(float32_t amplitude, uint32_t index, uint32_t samplerate, uint32_t freq) -{ - float32_t ret = amplitude * arm_sin_f32(((float32_t)index / (float32_t)samplerate) * PI * 2.0f * (float32_t)freq); - return ret; -} - -static uint32_t CPULOAD_startWorkTime = 0; -static uint32_t CPULOAD_startSleepTime = 0; -static uint32_t CPULOAD_WorkingTime = 0; -static uint32_t CPULOAD_SleepingTime = 0; -static uint32_t CPULOAD_SleepCounter = 0; -static bool CPULOAD_status = true; // true - wake up ; false - sleep - -void CPULOAD_Init(void) -{ - //DBGMCU->CR |= (DBGMCU_CR_DBG_SLEEPD1_Msk | DBGMCU_CR_DBG_STOPD1_Msk | DBGMCU_CR_DBG_STANDBYD1_Msk); - // allow using the counter - CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; - // start the counter - DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk; - // zero the value of the counting register - DWT->CYCCNT = 0; - CPULOAD_status = true; -} - -void CPULOAD_GoToSleepMode(void) -{ - // Add to working time - CPULOAD_WorkingTime += DWT->CYCCNT - CPULOAD_startWorkTime; - // Save count cycle time - CPULOAD_SleepCounter++; - CPULOAD_startSleepTime = DWT->CYCCNT; - CPULOAD_status = false; - // Go to sleep mode Wait for wake up interrupt - __WFI(); -} - -void CPULOAD_WakeUp(void) -{ - if (CPULOAD_status) - return; - CPULOAD_status = true; - // Increase number of sleeping time in CPU cycles - CPULOAD_SleepingTime += DWT->CYCCNT - CPULOAD_startSleepTime; - // Save current time to get number of working CPU cycles - CPULOAD_startWorkTime = DWT->CYCCNT; -} - -void CPULOAD_Calc(void) -{ - // Save values - CPU_LOAD.SCNT = CPULOAD_SleepingTime; - CPU_LOAD.WCNT = CPULOAD_WorkingTime; - CPU_LOAD.SINC = CPULOAD_SleepCounter; - CPU_LOAD.Load = ((float)CPULOAD_WorkingTime / (float)(CPULOAD_SleepingTime + CPULOAD_WorkingTime) * 100); - if (CPU_LOAD.SCNT == 0) - { - CPU_LOAD.Load = 100; - } - if (CPU_LOAD.SCNT == 0 && CPU_LOAD.WCNT == 0) - { - CPU_LOAD.Load = 255; - //CPULOAD_Init(); - } - // Reset time - CPULOAD_SleepingTime = 0; - CPULOAD_WorkingTime = 0; - CPULOAD_SleepCounter = 0; -} - -inline int32_t convertToSPIBigEndian(int32_t in) -{ - return (int32_t)(0xFFFF0000 & (uint32_t)(in << 16)) | (int32_t)(0x0000FFFF & (uint32_t)(in >> 16)); -} - -inline uint8_t rev8(uint8_t data) -{ - uint32_t tmp = data; - return (uint8_t)(__RBIT(tmp) >> 24); -} - -bool SPI_Transmit(uint8_t *out_data, uint8_t *in_data, uint16_t count, GPIO_TypeDef *CS_PORT, uint16_t CS_PIN, bool hold_cs, uint32_t prescaler) -{ - if (SPI_busy) - { - sendToDebug_strln("SPI Busy"); - return false; - } - - //SPI speed - if(hspi2.Init.BaudRatePrescaler != prescaler) - { - hspi2.Init.BaudRatePrescaler = prescaler; - HAL_SPI_Init(&hspi2); - } - - const int32_t timeout = 0x200; //HAL_MAX_DELAY - SPI_busy = true; - HAL_GPIO_WritePin(CS_PORT, CS_PIN, GPIO_PIN_RESET); - HAL_StatusTypeDef res = 0; - if (in_data == NULL) - { - res = HAL_SPI_Transmit(&hspi2, out_data, count, timeout); - } - else if (out_data == NULL) - { - memset(in_data, 0x00, count); - res = HAL_SPI_Receive(&hspi2, in_data, count, timeout); - } - else - { - memset(in_data, 0x00, count); - res = HAL_SPI_TransmitReceive(&hspi2, out_data, in_data, count, timeout); - } - if (!hold_cs) - HAL_GPIO_WritePin(CS_PORT, CS_PIN, GPIO_PIN_SET); - SPI_busy = false; - if (res == HAL_TIMEOUT || res == HAL_ERROR) - return false; - else - return true; -} diff --git a/Src/functions.h b/Src/functions.h deleted file mode 100644 index 886fb94..0000000 --- a/Src/functions.h +++ /dev/null @@ -1,141 +0,0 @@ -#ifndef Functions_h -#define Functions_h - -#include "stm32f4xx_hal.h" -#include -#include -#include -#include "profiler.h" - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wimplicit-int-conversion" -#pragma GCC diagnostic ignored "-Wsign-conversion" -#include "arm_math.h" -#pragma GCC diagnostic pop - -#define TRX_MODE_LSB 0 -#define TRX_MODE_USB 1 -#define TRX_MODE_CW_L 2 -#define TRX_MODE_CW_U 3 -#define TRX_MODE_NFM 4 -#define TRX_MODE_WFM 5 -#define TRX_MODE_AM 6 -#define TRX_MODE_DIGI_L 7 -#define TRX_MODE_DIGI_U 8 -#define TRX_MODE_IQ 9 -#define TRX_MODE_LOOPBACK 10 -#define TRX_MODE_NO_TX 11 -#define TRX_MODE_COUNT 12 - -#define IRAM1 __attribute__((section(".IRAM1"))) // 128kb IRAM1 -#define IRAM2 __attribute__((section(".IRAM2"))) // 64kb IRAM2 -#define BACKUP_SRAM_BANK1_ADDR (uint32_t *)(BKPSRAM_BASE) -#define BACKUP_SRAM_BANK2_ADDR (uint32_t *)(BKPSRAM_BASE+0x800) // 4kb Backup SRAM - -//UINT from BINARY STRING -#define HEX__(n) 0x##n##LU -#define B8__(x) ((x & 0x0000000FLU) ? 1 : 0) + ((x & 0x000000F0LU) ? 2 : 0) + ((x & 0x00000F00LU) ? 4 : 0) + ((x & 0x0000F000LU) ? 8 : 0) + ((x & 0x000F0000LU) ? 16 : 0) + ((x & 0x00F00000LU) ? 32 : 0) + ((x & 0x0F000000LU) ? 64 : 0) + ((x & 0xF0000000LU) ? 128 : 0) -#define B8(d) ((unsigned char)B8__(HEX__(d))) - -#define bitRead(value, bit) (((value) >> (bit)) & 0x01) -#define bitSet(value, bit) ((value) |= (1UL << (bit))) -#define bitClear(value, bit) ((value) &= ~(1UL << (bit))) -#define bitWrite(value, bit, bitvalue) (bitvalue ? bitSet(value, bit) : bitClear(value, bit)) - -#ifdef __clang__ - #define isnanf __ARM_isnanf - #define isinff __ARM_isinff -#endif - -#define F_PI 3.141592653589793238463f -#define SQRT2 1.41421356237f -#define ARRLENTH(x) (sizeof(x) / sizeof((x)[0])) -#define MINI_DELAY \ - for (uint_fast16_t wait_i = 0; wait_i < 100; wait_i++) \ - __asm("nop"); - -// Example of __DATE__ string: "Jul 27 2012" -// 01234567890 -#define BUILD_YEAR_CH0 (__DATE__[7]) -#define BUILD_YEAR_CH1 (__DATE__[8]) -#define BUILD_YEAR_CH2 (__DATE__[9]) -#define BUILD_YEAR_CH3 (__DATE__[10]) -#define BUILD_MONTH_IS_JAN (__DATE__[0] == 'J' && __DATE__[1] == 'a' && __DATE__[2] == 'n') -#define BUILD_MONTH_IS_FEB (__DATE__[0] == 'F') -#define BUILD_MONTH_IS_MAR (__DATE__[0] == 'M' && __DATE__[1] == 'a' && __DATE__[2] == 'r') -#define BUILD_MONTH_IS_APR (__DATE__[0] == 'A' && __DATE__[1] == 'p') -#define BUILD_MONTH_IS_MAY (__DATE__[0] == 'M' && __DATE__[1] == 'a' && __DATE__[2] == 'y') -#define BUILD_MONTH_IS_JUN (__DATE__[0] == 'J' && __DATE__[1] == 'u' && __DATE__[2] == 'n') -#define BUILD_MONTH_IS_JUL (__DATE__[0] == 'J' && __DATE__[1] == 'u' && __DATE__[2] == 'l') -#define BUILD_MONTH_IS_AUG (__DATE__[0] == 'A' && __DATE__[1] == 'u') -#define BUILD_MONTH_IS_SEP (__DATE__[0] == 'S') -#define BUILD_MONTH_IS_OCT (__DATE__[0] == 'O') -#define BUILD_MONTH_IS_NOV (__DATE__[0] == 'N') -#define BUILD_MONTH_IS_DEC (__DATE__[0] == 'D') -#define BUILD_MONTH_CH0 \ - ((BUILD_MONTH_IS_OCT || BUILD_MONTH_IS_NOV || BUILD_MONTH_IS_DEC) ? '1' : '0') -#define BUILD_MONTH_CH1 \ - ( \ - (BUILD_MONTH_IS_JAN) ? '1' : (BUILD_MONTH_IS_FEB) ? '2' : (BUILD_MONTH_IS_MAR) ? '3' : (BUILD_MONTH_IS_APR) ? '4' : (BUILD_MONTH_IS_MAY) ? '5' : (BUILD_MONTH_IS_JUN) ? '6' : (BUILD_MONTH_IS_JUL) ? '7' : (BUILD_MONTH_IS_AUG) ? '8' : (BUILD_MONTH_IS_SEP) ? '9' : (BUILD_MONTH_IS_OCT) ? '0' : (BUILD_MONTH_IS_NOV) ? '1' : (BUILD_MONTH_IS_DEC) ? '2' : /* error default */ '?') -#define BUILD_DAY_CH0 (__DATE__[4] == ' ' ? '0' : __DATE__[4] ) -#define BUILD_DAY_CH1 (__DATE__[5]) - -// Example of __TIME__ string: "21:06:19" -// 01234567 -#define BUILD_HOUR_CH0 (__TIME__[0]) -#define BUILD_HOUR_CH1 (__TIME__[1]) -#define BUILD_MIN_CH0 (__TIME__[3]) -#define BUILD_MIN_CH1 (__TIME__[4]) -#define BUILD_SEC_CH0 (__TIME__[6]) -#define BUILD_SEC_CH1 (__TIME__[7]) - -typedef struct -{ - float32_t Load; /*!< CPU load percentage */ - uint32_t WCNT; /*!< Number of working cycles in one period. Meant for private use */ - uint32_t SCNT; /*!< Number of sleeping cycles in one period. Meant for private use */ - uint32_t SINC; -} CPULOAD_t; - -extern CPULOAD_t CPU_LOAD; -volatile extern bool SPI_process; - -extern void CPULOAD_Init(void); -extern void CPULOAD_GoToSleepMode(void); -extern void CPULOAD_WakeUp(void); -extern void CPULOAD_Calc(void); -extern uint32_t getRXPhraseFromFrequency(int32_t freq); -extern uint32_t getTXPhraseFromFrequency(int32_t freq); -extern void addSymbols(char *dest, char *str, uint_fast8_t length, char *symbol, bool toEnd); -extern void sendToDebug_str(char *str); -extern void sendToDebug_strln(char *data); -extern void sendToDebug_str2(char *data1, char *data2); -extern void sendToDebug_str3(char *data1, char *data2, char *data3); -extern void sendToDebug_newline(void); -extern void sendToDebug_flush(void); -extern void sendToDebug_uint8(uint8_t data, bool _inline); -extern void sendToDebug_uint16(uint16_t data, bool _inline); -extern void sendToDebug_uint32(uint32_t data, bool _inline); -extern void sendToDebug_int8(int8_t data, bool _inline); -extern void sendToDebug_int16(int16_t data, bool _inline); -extern void sendToDebug_int32(int32_t data, bool _inline); -extern void sendToDebug_float32(float32_t data, bool _inline); -extern void sendToDebug_hex(uint8_t data, bool _inline); -//extern void delay_us(uint32_t us); -extern float32_t log10f_fast(float32_t X); -extern void readFromCircleBuffer32(uint32_t *source, uint32_t *dest, uint32_t index, uint32_t length, uint32_t words_to_read); -extern void readHalfFromCircleUSBBuffer24Bit(uint8_t *source, int32_t *dest, uint32_t index, uint32_t length); -extern void dma_memcpy32(uint32_t *dest, uint32_t *src, uint32_t len); -extern float32_t db2rateV(float32_t i); -extern float32_t db2rateP(float32_t i); -extern float32_t rate2dbV(float32_t i); -extern float32_t rate2dbP(float32_t i); -extern float32_t volume2rate(float32_t i); -extern void shiftTextLeft(char *string, uint_fast16_t shiftLength); -extern float32_t getMaxTXAmplitudeOnFreq(uint32_t freq); -extern float32_t generateSin(float32_t amplitude, uint32_t index, uint32_t samplerate, uint32_t freq); -extern int32_t convertToSPIBigEndian(int32_t in); -extern uint8_t rev8(uint8_t data); -extern bool SPI_Transmit(uint8_t *out_data, uint8_t *in_data, uint16_t count, GPIO_TypeDef *CS_PORT, uint16_t CS_PIN, bool hold_cs, uint32_t prescaler); - -#endif diff --git a/Src/i2c.c b/Src/i2c.c deleted file mode 100644 index 8776fa8..0000000 --- a/Src/i2c.c +++ /dev/null @@ -1,270 +0,0 @@ -#include "stm32f4xx_hal.h" -#include "main.h" -#include "functions.h" -#include "i2c.h" - -/* low level conventions: - * - SDA/SCL idle high (expected high) - * - always start with i2c_delay rather than end - */ - -I2C_DEVICE I2C_WM8731 = { - .SDA_PORT = WM8731_SDA_GPIO_Port, - .SDA_PIN = WM8731_SDA_Pin, - .SCK_PORT = WM8731_SCK_GPIO_Port, - .SCK_PIN = WM8731_SCK_Pin, - .i2c_tx_addr = 0, - .i2c_tx_buf = {0}, - .i2c_tx_buf_idx = 0, - .i2c_tx_buf_overflow = false, -}; - -#ifdef HAS_TOUCHPAD -I2C_DEVICE I2C_TOUCHPAD = { - .SDA_PORT = ENC2_CLK_GPIO_Port, - .SDA_PIN = ENC2_CLK_Pin, - .SCK_PORT = ENC2_DT_GPIO_Port, - .SCK_PIN = ENC2_DT_Pin, - .i2c_tx_addr = 0, - .i2c_tx_buf = {0}, - .i2c_tx_buf_idx = 0, - .i2c_tx_buf_overflow = false, -}; -#endif - -static uint8_t i2c_writeOneByte(I2C_DEVICE *dev, uint8_t); - -static void SDA_OUT(I2C_DEVICE *dev) -{ - GPIO_InitTypeDef GPIO_InitStruct; - GPIO_InitStruct.Pin = dev->SDA_PIN; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD; - GPIO_InitStruct.Pull = GPIO_PULLUP; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(dev->SDA_PORT, &GPIO_InitStruct); -} - -static void SDA_IN(I2C_DEVICE *dev) -{ - GPIO_InitTypeDef GPIO_InitStruct; - GPIO_InitStruct.Pin = dev->SDA_PIN; - GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - GPIO_InitStruct.Pull = GPIO_PULLUP; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(dev->SDA_PORT, &GPIO_InitStruct); -} - -static void SCK_OUT(I2C_DEVICE *dev) -{ - GPIO_InitTypeDef GPIO_InitStruct; - GPIO_InitStruct.Pin = dev->SCK_PIN; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD; - GPIO_InitStruct.Pull = GPIO_PULLUP; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(dev->SCK_PORT, &GPIO_InitStruct); -} - -void i2c_start(I2C_DEVICE *dev) -{ - SDA_SET; - SCK_SET; - I2C_DELAY - SDA_CLR; - I2C_DELAY - SCK_CLR; -} - -void i2c_stop(I2C_DEVICE *dev) -{ - SDA_OUT(dev); - SDA_CLR; - SCK_SET; - I2C_DELAY - I2C_DELAY - I2C_DELAY - I2C_DELAY - SDA_SET; - I2C_DELAY -} - -bool i2c_get_ack(I2C_DEVICE *dev) -{ - uint32_t time = 0; - - SDA_IN(dev); - - I2C_DELAY - I2C_DELAY - SCK_SET; - I2C_DELAY - I2C_DELAY - - while (HAL_GPIO_ReadPin(dev->SDA_PORT, dev->SDA_PIN)) - { - time++; - if (time > 50) - { - i2c_stop(dev); - return false; - } - I2C_DELAY - I2C_DELAY - } - - SCK_CLR; - - return true; -} - -void i2c_shift_out(I2C_DEVICE *dev, uint8_t val) -{ - SDA_OUT(dev); - int i; - for (i = 0; i < 8; i++) - { - - I2C_DELAY - HAL_GPIO_WritePin(dev->SDA_PORT, dev->SDA_PIN, (GPIO_PinState) !!(val & (1 << (7 - i)))); - SDA_OUT(dev); - - I2C_DELAY - SCK_SET; - - I2C_DELAY - I2C_DELAY - SCK_CLR; - } -} - -/* - * Joins I2C bus as master on given SDA and SCL pins. - */ -void i2c_begin(I2C_DEVICE *dev) -{ - SCK_SET; - SDA_SET; - - SCK_OUT(dev); - SDA_OUT(dev); -} - -void i2c_beginTransmission_u8(I2C_DEVICE *dev, uint8_t slave_address) -{ - i2c_begin(dev); - dev->i2c_tx_addr = slave_address; - dev->i2c_tx_buf_idx = 0; - dev->i2c_tx_buf_overflow = false; -} - -bool i2c_beginReceive_u8(I2C_DEVICE *dev, uint8_t slave_address) -{ - i2c_begin(dev); - dev->i2c_tx_addr = slave_address; - dev->i2c_tx_buf_idx = 0; - dev->i2c_tx_buf_overflow = false; - i2c_start(dev); - i2c_shift_out(dev, (uint8_t)((dev->i2c_tx_addr << 1) | I2C_READ)); - if (!i2c_get_ack(dev)) - { - //sendToDebug_strln("no ack"); - return false; - } - return true; -} - -uint8_t i2c_endTransmission(I2C_DEVICE *dev) -{ - if (dev->i2c_tx_buf_overflow) - return EDATA; - i2c_start(dev); - - //I2C_DELAY; - i2c_shift_out(dev, (uint8_t)((dev->i2c_tx_addr << 1) | I2C_WRITE)); - if (!i2c_get_ack(dev)) - return ENACKADDR; - - // shift out the address we're transmitting to - for (uint8_t i = 0; i < dev->i2c_tx_buf_idx; i++) - { - uint8_t ret = i2c_writeOneByte(dev, dev->i2c_tx_buf[i]); - if (ret) - return ret; // SUCCESS is 0 - } - I2C_DELAY - I2C_DELAY - i2c_stop(dev); - - dev->i2c_tx_buf_idx = 0; - dev->i2c_tx_buf_overflow = false; - return SUCCESS; -} - -void i2c_write_u8(I2C_DEVICE *dev, uint8_t value) -{ - if (dev->i2c_tx_buf_idx == WIRE_BUFSIZ) - { - dev->i2c_tx_buf_overflow = true; - return; - } - - dev->i2c_tx_buf[dev->i2c_tx_buf_idx++] = value; -} - -// private methods -static uint8_t i2c_writeOneByte(I2C_DEVICE *dev, uint8_t byte) -{ - i2c_shift_out(dev, byte); - if (!i2c_get_ack(dev)) - return ENACKTRNS; - return SUCCESS; -} - -uint8_t i2c_Read_Byte(I2C_DEVICE *dev, uint8_t ack) -{ - unsigned char i,receive=0; - SDA_IN(dev); - I2C_DELAY - I2C_DELAY - - for(i=0;i<8;i++ ) - { - SCK_CLR; - I2C_DELAY - I2C_DELAY - SCK_SET; - receive<<=1; - I2C_DELAY - I2C_DELAY - if(HAL_GPIO_ReadPin(dev->SDA_PORT,dev->SDA_PIN)) - receive++; - } - if (!ack) - { - //NAck - SCK_CLR; - SDA_OUT(dev); - SDA_SET; - I2C_DELAY - I2C_DELAY - SCK_SET; - I2C_DELAY - I2C_DELAY - SCK_CLR; - SDA_IN(dev); - } - else - { - //Ack - SCK_CLR; - SDA_OUT(dev); - SDA_CLR; - I2C_DELAY - I2C_DELAY - SCK_SET; - I2C_DELAY - I2C_DELAY - SCK_CLR; - SDA_IN(dev); - } - return receive; -} diff --git a/Src/i2c.h b/Src/i2c.h deleted file mode 100644 index 1229f1f..0000000 --- a/Src/i2c.h +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef WIRE_h -#define WIRE_h - -#include "main.h" -#include "stm32f4xx_hal.h" -#include "stm32f4xx_hal_gpio.h" -#include - -#define WIRE_BUFSIZ 101 - -/* return codes from endTransmission() */ -#define SUCCESS 0 /* transmission was successful */ -#define EDATA 1 /* too much data */ -#define ENACKADDR 2 /* received nack on transmit of address */ -#define ENACKTRNS 3 /* received nack on transmit of data */ -#define EOTHER 4 /* other error */ - -#define I2C_WRITE 0 -#define I2C_READ 1 -#define I2C_DELAY \ - for (uint32_t wait_i = 0; wait_i < 300; wait_i++) \ - { \ - __asm("nop"); \ - }; - -typedef struct -{ - GPIO_TypeDef *SDA_PORT; - uint16_t SDA_PIN; - GPIO_TypeDef *SCK_PORT; - uint16_t SCK_PIN; - uint8_t i2c_tx_addr; /* address transmitting to */ - uint8_t i2c_tx_buf[WIRE_BUFSIZ]; /* transmit buffer */ - uint8_t i2c_tx_buf_idx; /* next idx available in tx_buf, -1 overflow */ - bool i2c_tx_buf_overflow; -} I2C_DEVICE; - -extern I2C_DEVICE I2C_WM8731; - -#ifdef HAS_TOUCHPAD -extern I2C_DEVICE I2C_TOUCHPAD; -#endif - -#define SDA_SET HAL_GPIO_WritePin(dev->SDA_PORT, dev->SDA_PIN, GPIO_PIN_SET) -#define SCK_SET HAL_GPIO_WritePin(dev->SCK_PORT, dev->SCK_PIN, GPIO_PIN_SET) -#define SDA_CLR HAL_GPIO_WritePin(dev->SDA_PORT, dev->SDA_PIN, GPIO_PIN_RESET) -#define SCK_CLR HAL_GPIO_WritePin(dev->SCK_PORT, dev->SCK_PIN, GPIO_PIN_RESET) - -extern void i2c_begin(I2C_DEVICE *dev); -extern void i2c_beginTransmission_u8(I2C_DEVICE *dev, uint8_t); -extern void i2c_write_u8(I2C_DEVICE *dev, uint8_t); -extern void i2c_shift_out(I2C_DEVICE *dev, uint8_t val); -extern void i2c_start(I2C_DEVICE *dev); -extern void i2c_stop(I2C_DEVICE *dev); -extern bool i2c_get_ack(I2C_DEVICE *dev); -extern bool i2c_beginReceive_u8(I2C_DEVICE *dev, uint8_t slave_address); -extern uint8_t i2c_Read_Byte(I2C_DEVICE *dev, uint8_t ack); -extern uint8_t i2c_endTransmission(I2C_DEVICE *dev); - -#endif diff --git a/Src/images.h b/Src/images.h deleted file mode 100644 index ccbcdde..0000000 --- a/Src/images.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef __IMAGES_H -#define __IMAGES_H - -#include "stm32f4xx_hal.h" -#include "functions.h" - -// Convert image in https://sourceforge.net/projects/lcd-image-converter/ -// preset name: Color R5G6B5 -// data block size: 16 bit(s), uint16_t -// RLE compression enabled: yes !!!!!!! -// bits per pixel: 16 - -typedef struct -{ // image structure - const uint16_t width; - const uint16_t height; - const uint16_t *data; -} tIMAGE; - -// Startup logo -static const tIMAGE IMAGES_logo = { - .width = 480, - .height = 320, - .data = (const uint16_t[]){0x2fcc, 0xf79e, 0xffff, 0xf7be, 0x0025, 0xf79e, 0xffff, 0xf7be, 0x1473, 0xf79e, 0xfff7, 0xdefb, 0xce38, 0xb575, 0x94b2, 0x840f, 0x7bce, 0x630c, 0x5aeb, 0x52aa, 0x0002, 0x5289, 0xfff8, 0x5aca, 0x630c, 0x6b4d, 0x83ef, 0x8c71, 0xa514, 0xc5f7, 0xdeba, 0x01c7, 0xf79e, 0xfff8, 0xe71b, 0xbdb6, 0x840f, 0x5aca, 0x39a6, 0x2103, 0x0861, 0x0820, 0x0003, 0x0840, 0x0007, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xfff8, 0x0820, 0x0840, 0x18a2, 0x3165, 0x4a28, 0x7bce, 0xa514, 0xd69a, 0x01bd, 0xf79e, 0xfffb, 0xe6fb, 0xad34, 0x630b, 0x3165, 0x1081, 0x0004, 0x0840, 0xffff, 0x0820, 0x0003, 0x0840, 0x0002, 0x0820, 0x0006, 0x0840, 0x0003, 0x0820, 0x0002, 0x0840, 0x0002, 0x0820, 0xffff, 0x0840, 0x0002, 0x0820, 0xfffe, 0x0840, 0x0820, 0x0002, 0x0840, 0xfffc, 0x18e3, 0x4a69, 0x8c50, 0xce58, 0x01b6, 0xf79e, 0xfffb, 0xd679, 0x83ef, 0x39a6, 0x1061, 0x0820, 0x0003, 0x0840, 0x0002, 0x0820, 0x0007, 0x0840, 0x0006, 0x0820, 0x0004, 0x0840, 0xffff, 0x0820, 0x0004, 0x0840, 0x0002, 0x0820, 0x0006, 0x0840, 0xfffb, 0x0820, 0x1061, 0x20e3, 0x630b, 0xb575, 0x01b0, 0xf79e, 0xfffd, 0xd699, 0x83ef, 0x2944, 0x0002, 0x0820, 0xffff, 0x0840, 0x0002, 0x0820, 0x0003, 0x0840, 0xffff, 0x0820, 0x0005, 0x0840, 0x0003, 0x0820, 0x0005, 0x0840, 0x0002, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0x0002, 0x0820, 0x0004, 0x0840, 0xfffd, 0x1060, 0x0840, 0x0820, 0x0002, 0x0840, 0x0002, 0x0820, 0x0002, 0x0840, 0xfffc, 0x0020, 0x18a2, 0x5acb, 0xbdb6, 0x01ab, 0xf79e, 0xfffc, 0xa513, 0x4a28, 0x0840, 0x0820, 0x0007, 0x0840, 0xffff, 0x0820, 0x0003, 0x0840, 0x0003, 0x0820, 0x0005, 0x0840, 0xfffe, 0x0820, 0x0840, 0x0005, 0x1081, 0xfffd, 0x1061, 0x0840, 0x0820, 0x0002, 0x0840, 0x0004, 0x0820, 0x000c, 0x0840, 0xfffb, 0x0820, 0x0840, 0x2124, 0x7bce, 0xdeba, 0x01a5, 0xf79e, 0xfffd, 0xe6fb, 0x7bce, 0x2103, 0x0002, 0x0840, 0x0002, 0x0820, 0x000a, 0x0840, 0xfff4, 0x0820, 0x0840, 0x18a2, 0x3185, 0x5289, 0x738d, 0x9491, 0xad54, 0xc5f7, 0xce79, 0xdeda, 0xdefb, 0x0004, 0xe71b, 0xfff2, 0xdefb, 0xdeba, 0xc638, 0xb595, 0x9cd2, 0x7bef, 0x5aeb, 0x4207, 0x2104, 0x0840, 0x0820, 0x0860, 0x0840, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x0004, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xfffc, 0x0820, 0x1081, 0x52a9, 0xbdd6, 0x01a1, 0xf79e, 0xfffa, 0xdeda, 0x734d, 0x18a2, 0x0820, 0x0840, 0x0820, 0x0003, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0x0002, 0x0820, 0x0002, 0x0840, 0xfffb, 0x1081, 0x39a6, 0x6b6c, 0xa533, 0xce79, 0x0017, 0xf79e, 0xfff9, 0xe71b, 0xb595, 0x840f, 0x4228, 0x18c2, 0x0840, 0x0820, 0x0004, 0x0840, 0xffff, 0x1040, 0x0002, 0x0820, 0x0003, 0x0840, 0xfffc, 0x0820, 0x0840, 0x41e7, 0xbdd6, 0x019d, 0xf79e, 0xfff9, 0xe6fb, 0x6b2c, 0x1081, 0x0840, 0x0820, 0x1040, 0x0820, 0x0003, 0x0840, 0x0002, 0x0820, 0x0003, 0x0840, 0xfffc, 0x2944, 0x632c, 0xb595, 0xe73c, 0x0020, 0xf79e, 0xfffa, 0xce38, 0x8430, 0x4207, 0x0841, 0x0840, 0x0820, 0x0006, 0x0840, 0xffff, 0x0820, 0x0003, 0x0840, 0xfffe, 0x39e7, 0xbdb6, 0x019a, 0xf79e, 0xfff9, 0x7bef, 0x18a2, 0x0820, 0x0840, 0x0820, 0x0840, 0x0820, 0x0002, 0x0840, 0x0002, 0x0820, 0xfffb, 0x0840, 0x0841, 0x2944, 0x7bae, 0xce58, 0x0028, 0xf79e, 0xfffb, 0x9cd3, 0x4a28, 0x1081, 0x0840, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xfffe, 0x0800, 0x0840, 0x0002, 0x0820, 0xfffe, 0x5269, 0xce59, 0x0196, 0xf79e, 0xfffd, 0xa513, 0x2924, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x0003, 0x0840, 0x0003, 0x0820, 0xfffd, 0x18c2, 0x62eb, 0xc618, 0x002d, 0xf79e, 0xfffb, 0xdedb, 0x8c50, 0x31a6, 0x0840, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0x0003, 0x0820, 0xfffe, 0x1081, 0x6b4d, 0x0193, 0xf79e, 0xfffe, 0xd699, 0x5269, 0x0004, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0x0002, 0x0820, 0xfffc, 0x0840, 0x2945, 0x9471, 0xe73c, 0x0032, 0xf79e, 0xfffb, 0xb595, 0x5289, 0x0841, 0x0820, 0x1040, 0x0002, 0x0820, 0xfffe, 0x1060, 0x0840, 0x0002, 0x0820, 0xfffd, 0x0840, 0x2103, 0xad34, 0x0166, 0xf79e, 0xffff, 0xf7be, 0x0029, 0xf79e, 0xfffe, 0x9491, 0x20c2, 0x0002, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xfffc, 0x0000, 0x0840, 0x39e7, 0xa534, 0x0037, 0xf79e, 0xfffb, 0xce79, 0x5aca, 0x1081, 0x0820, 0x0840, 0x0002, 0x0820, 0x0002, 0x0840, 0xfffb, 0x1040, 0x0820, 0x0840, 0x52aa, 0xef5c, 0x0164, 0xf79e, 0xffff, 0xf7be, 0x0027, 0xf79e, 0xfffe, 0xe6fb, 0x4a49, 0x0002, 0x0820, 0xfffe, 0x0840, 0x0820, 0x0005, 0x0840, 0xfffe, 0x3165, 0xad54, 0x003b, 0xf79e, 0xfffe, 0xd679, 0x630b, 0x0002, 0x0840, 0x0002, 0x0820, 0xfff9, 0x0840, 0x0820, 0x0840, 0x0820, 0x0840, 0x20e3, 0xad75, 0x018a, 0xf79e, 0xfffe, 0xb575, 0x18c2, 0x0002, 0x0840, 0xfffe, 0x0820, 0x0840, 0x0004, 0x0820, 0xfffe, 0x2103, 0x9cb2, 0x003f, 0xf79e, 0xfffe, 0xce58, 0x4207, 0x0002, 0x0840, 0xfffc, 0x0820, 0x1040, 0x0800, 0x1040, 0x0002, 0x0820, 0xfffe, 0x0840, 0x738d, 0x0164, 0xf79e, 0xffff, 0xf7be, 0x0023, 0xf79e, 0xfffc, 0x7bcf, 0x1061, 0x0841, 0x0820, 0x0002, 0x0840, 0x0002, 0x0820, 0xfffd, 0x0840, 0x1081, 0x6b6d, 0x0043, 0xf79e, 0xfffa, 0xad34, 0x2924, 0x0840, 0x0820, 0x0840, 0x0820, 0x0003, 0x0840, 0xfffd, 0x0000, 0x41e7, 0xd6ba, 0x0160, 0xf79e, 0xffff, 0xf7be, 0x0024, 0xf79e, 0xfffb, 0x4a69, 0x0820, 0x0840, 0x0000, 0x0840, 0x0002, 0x0820, 0xfffc, 0x0840, 0x0820, 0x39c6, 0xce38, 0x0045, 0xf79e, 0xfffd, 0xef7d, 0x736d, 0x1061, 0x0002, 0x0840, 0xfff9, 0x0820, 0x0840, 0x0820, 0x1060, 0x0820, 0x2103, 0xbdd7, 0x0182, 0xf79e, 0xfffe, 0xdeda, 0x2965, 0x0002, 0x0840, 0xfff9, 0x0800, 0x1040, 0x0840, 0x0820, 0x0840, 0x1081, 0x8410, 0x0049, 0xf79e, 0xfffd, 0xc5f7, 0x3165, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x0003, 0x0840, 0xfffe, 0x1061, 0x9cd2, 0x0180, 0xf79e, 0xfffb, 0xce38, 0x18c2, 0x0840, 0x1040, 0x0820, 0x0002, 0x0840, 0xfffc, 0x0820, 0x0840, 0x3165, 0xc618, 0x004c, 0xf79e, 0xfffc, 0x630b, 0x0840, 0x0820, 0x1060, 0x0002, 0x0820, 0x0002, 0x0840, 0xfffe, 0x1061, 0x7bce, 0x017e, 0xf79e, 0xfffb, 0xb595, 0x18c2, 0x0860, 0x0820, 0x1040, 0x0002, 0x0820, 0x0002, 0x0840, 0xffff, 0x5aca, 0x004f, 0xf79e, 0xfffd, 0xa534, 0x18a2, 0x0820, 0x0005, 0x0840, 0xfffe, 0x0860, 0x6b4c, 0x017c, 0xf79e, 0xfffe, 0xb596, 0x1082, 0x0003, 0x0820, 0x0003, 0x0840, 0xfffe, 0x1060, 0x8c50, 0x0051, 0xf79e, 0xfffb, 0xd679, 0x2965, 0x0820, 0x0840, 0x0820, 0x0004, 0x0840, 0xffff, 0x5acb, 0x017a, 0xf79e, 0xfffe, 0xb596, 0x1061, 0x0004, 0x0840, 0xfffc, 0x0820, 0x0840, 0x20e2, 0xbdb5, 0x0053, 0xf79e, 0xfffe, 0xef7d, 0x4a69, 0x0002, 0x0840, 0xfffd, 0x0820, 0x0840, 0x0820, 0x0002, 0x0840, 0xffff, 0x5aeb, 0x0178, 0xf79e, 0xfffc, 0xb595, 0x1881, 0x0820, 0x1040, 0x0002, 0x0840, 0xfffc, 0x0820, 0x0840, 0x2944, 0xce79, 0x0056, 0xf79e, 0xfffd, 0x630c, 0x0820, 0x1040, 0x0002, 0x0820, 0x0002, 0x0840, 0xfffe, 0x0820, 0x62eb, 0x0176, 0xf79e, 0xfffc, 0xbdf7, 0x1082, 0x0820, 0x0840, 0x0002, 0x0820, 0xfffc, 0x0840, 0x0820, 0x3186, 0xe71c, 0x0058, 0xf79e, 0xfffe, 0x7bce, 0x0840, 0x0002, 0x0820, 0xfffe, 0x0840, 0x0820, 0x0002, 0x0840, 0xffff, 0x6b6d, 0x0174, 0xf79e, 0xfffd, 0xce79, 0x18c3, 0x0820, 0x0002, 0x0840, 0xffff, 0x1040, 0x0002, 0x0840, 0xffff, 0x41e7, 0x005b, 0xf79e, 0xfffe, 0x8c30, 0x1061, 0x0006, 0x0840, 0xffff, 0x840f, 0x0172, 0xf79e, 0xfffe, 0xe71b, 0x2103, 0x0002, 0x0840, 0x0002, 0x0820, 0x0002, 0x0840, 0xffff, 0x41e7, 0x004c, 0xf79e, 0xfffc, 0x8c71, 0x62eb, 0x840f, 0xf79d, 0x000d, 0xf79e, 0xfffd, 0x8430, 0x1081, 0x0820, 0x0002, 0x0840, 0xfffc, 0x0020, 0x0820, 0x1061, 0x9cf3, 0x0171, 0xf79e, 0xfff7, 0x41e7, 0x0840, 0x0820, 0x0000, 0x0840, 0x0820, 0x0840, 0x41e7, 0xef5c, 0x004a, 0xf79e, 0xfff9, 0xc638, 0x2945, 0x0840, 0x0820, 0x0840, 0x39c6, 0xef7d, 0x000d, 0xf79e, 0xfffe, 0x8430, 0x0860, 0x0002, 0x0840, 0x0002, 0x1040, 0xfffd, 0x0820, 0x1081, 0xc5f7, 0x016f, 0xf79e, 0xfff7, 0x6b2c, 0x0000, 0x0820, 0x0840, 0x1060, 0x0820, 0x0840, 0x3185, 0xe71b, 0x004a, 0xf79e, 0xfff8, 0xad75, 0x18a2, 0x0840, 0x0820, 0x0840, 0x0820, 0x0840, 0x5289, 0x000e, 0xf79e, 0xffff, 0x73ae, 0x0002, 0x0840, 0x0002, 0x0820, 0xfffc, 0x0840, 0x0820, 0x20e3, 0xe6fb, 0x016d, 0xf79e, 0xffff, 0x9cb2, 0x0003, 0x0840, 0xfffb, 0x0820, 0x0840, 0x0841, 0x20e3, 0xd6ba, 0x004a, 0xf79e, 0xfffc, 0xad75, 0x1081, 0x0820, 0x0000, 0x0003, 0x0840, 0xfffd, 0x0820, 0x0840, 0xa534, 0x000e, 0xf79e, 0xfffe, 0x630b, 0x0840, 0x0002, 0x0820, 0x0002, 0x0840, 0xfffe, 0x0820, 0x41e7, 0x016c, 0xf79e, 0xfff7, 0xce59, 0x18a2, 0x0820, 0x0840, 0x0820, 0x1040, 0x0820, 0x1061, 0xce59, 0x004a, 0xf79e, 0xfff8, 0xbdd6, 0x1081, 0x0840, 0x0820, 0x0840, 0x0820, 0x0840, 0x0820, 0x0002, 0x0840, 0xffff, 0x2924, 0x000f, 0xf79e, 0xfffe, 0x4207, 0x0840, 0x0003, 0x0820, 0x0002, 0x0840, 0xffff, 0x736d, 0x016b, 0xf79e, 0xfffd, 0x3186, 0x0840, 0x0820, 0x0002, 0x0840, 0xfffd, 0x0800, 0x1061, 0xa514, 0x004a, 0xf79e, 0xfffe, 0xc638, 0x18c2, 0x0005, 0x0840, 0xfffe, 0x1040, 0x0820, 0x0003, 0x0840, 0xffff, 0xad54, 0x000e, 0xf79e, 0xfffe, 0xe71b, 0x2944, 0x0002, 0x0820, 0x0002, 0x0840, 0xfffd, 0x0820, 0x0840, 0xb595, 0x0169, 0xf79e, 0xffff, 0x736d, 0x0002, 0x0820, 0xfffb, 0x0860, 0x0800, 0x0820, 0x0840, 0x7bae, 0x004a, 0xf79e, 0xfffe, 0xdefb, 0x2944, 0x0002, 0x0840, 0xffff, 0x0000, 0x0002, 0x0840, 0xfffd, 0x1040, 0x0820, 0x1040, 0x0003, 0x0820, 0xffff, 0x52aa, 0x000f, 0xf79e, 0xfffe, 0xce38, 0x1061, 0x0002, 0x0840, 0xfffb, 0x0800, 0x1061, 0x0840, 0x2944, 0xef7d, 0x0167, 0xf79e, 0xfffd, 0xbdd6, 0x1061, 0x0820, 0x0002, 0x0840, 0xfffd, 0x0820, 0x0840, 0x4a28, 0x004b, 0xf79e, 0xfffe, 0x39c6, 0x0000, 0x0002, 0x0820, 0xfffe, 0x1060, 0x0820, 0x0002, 0x0840, 0xfffe, 0x0820, 0x1040, 0x0003, 0x0840, 0xffff, 0x18a2, 0x0010, 0xf79e, 0xfffe, 0x9cb2, 0x0840, 0x0003, 0x0820, 0xfffd, 0x0840, 0x0820, 0x630b, 0x0167, 0xf79e, 0xffff, 0x2965, 0x0003, 0x0840, 0x0002, 0x0820, 0xfffe, 0x18e2, 0xdeda, 0x004a, 0xf79e, 0xffff, 0x5269, 0x0009, 0x0840, 0xffff, 0x0820, 0x0003, 0x0840, 0xffff, 0x0820, 0x0011, 0xf79e, 0xfffd, 0x5acb, 0x0841, 0x0840, 0x0002, 0x0820, 0x0002, 0x0840, 0xffff, 0xb595, 0x0165, 0xf79e, 0xfffe, 0x7bce, 0x0820, 0x0004, 0x0840, 0xfffe, 0x1061, 0xa4f3, 0x004a, 0xf79e, 0xffff, 0x738d, 0x0002, 0x0840, 0xfffe, 0x0820, 0x0840, 0x0002, 0x0820, 0xffff, 0x0840, 0x0002, 0x0820, 0xfffe, 0x1060, 0x0820, 0x0002, 0x0840, 0xfffe, 0x0020, 0x1081, 0x0011, 0xf79e, 0xfffe, 0xef3c, 0x2924, 0x0002, 0x0820, 0xfffc, 0x1040, 0x0820, 0x0840, 0x2944, 0x0164, 0xf79e, 0xfffe, 0xd699, 0x10a1, 0x0002, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xffff, 0x5aca, 0x004a, 0xf79e, 0xffff, 0x8c50, 0x0002, 0x0840, 0xfff8, 0x0820, 0x0840, 0x0820, 0x0840, 0x1040, 0x0820, 0x0840, 0x0820, 0x0005, 0x0840, 0xffff, 0x31a6, 0x0012, 0xf79e, 0xfffb, 0xb595, 0x1061, 0x0820, 0x0840, 0x0820, 0x0002, 0x0840, 0xffff, 0x7bef, 0x0163, 0xf79e, 0xfffe, 0x5289, 0x0820, 0x0004, 0x0840, 0xfffe, 0x18c2, 0xe71b, 0x0049, 0xf79e, 0xffff, 0x9cd2, 0x0003, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xfff5, 0x0820, 0x1040, 0x0820, 0x1040, 0x0840, 0x0820, 0x0840, 0x0820, 0x0020, 0x0840, 0x632c, 0x0013, 0xf79e, 0xffff, 0x632c, 0x0003, 0x0840, 0x0002, 0x0820, 0xfffe, 0x1081, 0xe71b, 0x0161, 0xf79e, 0xffff, 0xbdd6, 0x0005, 0x0840, 0xfffe, 0x0820, 0xa4f3, 0x0049, 0xf79e, 0xfffe, 0x9cd2, 0x1081, 0x0002, 0x0840, 0xffff, 0x0820, 0x0004, 0x0840, 0xfffd, 0x0820, 0x0840, 0x0820, 0x0002, 0x0840, 0xffff, 0x1040, 0x0003, 0x0840, 0xffff, 0x94b2, 0x0013, 0xf79e, 0xfffd, 0xef5c, 0x18c2, 0x0820, 0x0004, 0x0840, 0xffff, 0x5aca, 0x0161, 0xf79e, 0xfff9, 0x41e7, 0x0820, 0x0840, 0x0820, 0x0840, 0x0820, 0x4207, 0x0049, 0xf79e, 0xfffe, 0x8430, 0x0861, 0x000c, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xfffd, 0x0820, 0x0840, 0xce79, 0x0014, 0xf79e, 0xfffd, 0x9cb2, 0x0820, 0x0840, 0x0003, 0x0820, 0xfffe, 0x1061, 0xce58, 0x015f, 0xf79e, 0xfffb, 0xb575, 0x1061, 0x0820, 0x0840, 0x0820, 0x0002, 0x0840, 0xffff, 0xc638, 0x0040, 0xf79e, 0xfff7, 0xe6fb, 0xce38, 0xbdd6, 0xbdf7, 0xc638, 0xd699, 0xe6fb, 0xa513, 0x39c6, 0x0002, 0x0840, 0x0002, 0x0820, 0x000b, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xffff, 0x18c2, 0x0016, 0xf79e, 0xfff9, 0x39a6, 0x0820, 0x0840, 0x0820, 0x1040, 0x0820, 0x5269, 0x015f, 0xf79e, 0xffff, 0x39c6, 0x0003, 0x0820, 0x0002, 0x0840, 0xffff, 0x5aeb, 0x003e, 0xf79e, 0xfffd, 0xa534, 0x5aca, 0x18c2, 0x0003, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x000e, 0x0840, 0xfff9, 0x0820, 0x1040, 0x0820, 0x0840, 0x0820, 0x0840, 0x4a48, 0x0006, 0xf79e, 0xfffd, 0xdefb, 0xad54, 0xdeda, 0x000d, 0xf79e, 0xfff8, 0xbdd6, 0x0840, 0x0820, 0x0840, 0x0820, 0x0840, 0x1061, 0xce38, 0x015d, 0xf79e, 0xffff, 0xb5b6, 0x0003, 0x0840, 0x0002, 0x0820, 0xfffe, 0x1081, 0xd699, 0x003c, 0xf79e, 0xfff8, 0xad34, 0x2965, 0x0820, 0x0840, 0x0860, 0x0840, 0x0820, 0x0840, 0x0003, 0x0820, 0xfffb, 0x0840, 0x0000, 0x0820, 0x0840, 0x0820, 0x000a, 0x0840, 0x0002, 0x0820, 0x0004, 0x0840, 0xffff, 0x7bce, 0x0003, 0xf79e, 0xfffd, 0xf77d, 0xa4f3, 0x4a28, 0x0002, 0x0840, 0xfffe, 0x1081, 0x9cf3, 0x000d, 0xf79e, 0xffff, 0x4a48, 0x0003, 0x0840, 0xfffd, 0x0820, 0x0840, 0x5aaa, 0x015d, 0xf79e, 0xfffe, 0x4207, 0x0840, 0x0002, 0x0820, 0x0002, 0x0840, 0xffff, 0x632c, 0x003b, 0xf79e, 0xfffa, 0xdedb, 0x5289, 0x0840, 0x0020, 0x0860, 0x0820, 0x0006, 0x0840, 0xfffb, 0x0820, 0x0840, 0x1040, 0x0840, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x0008, 0x0840, 0xfff3, 0x1060, 0x0840, 0x0820, 0x0840, 0x0000, 0x0840, 0xbdb6, 0xf79e, 0xd6b9, 0x7bae, 0x2103, 0x0840, 0x0020, 0x0003, 0x0840, 0xfffe, 0x18c2, 0xdefb, 0x000c, 0xf79e, 0xfffe, 0xbdd7, 0x0861, 0x0003, 0x0840, 0xfffd, 0x0820, 0x1061, 0xd69a, 0x015b, 0xf79e, 0xfff8, 0xce58, 0x0860, 0x0820, 0x1060, 0x0820, 0x0840, 0x1081, 0xd6ba, 0x003a, 0xf79e, 0xfffd, 0xad54, 0x18c2, 0x0000, 0x0002, 0x0840, 0x0002, 0x0820, 0x0002, 0x0840, 0x0002, 0x0820, 0x0003, 0x0840, 0x0003, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x0009, 0x0840, 0xffff, 0x0820, 0x0004, 0x0840, 0xfff9, 0x1061, 0xad34, 0x5aaa, 0x1081, 0x0820, 0x0840, 0x0820, 0x0003, 0x0840, 0x0002, 0x0820, 0xffff, 0xa534, 0x000d, 0xf79e, 0xffff, 0x4a48, 0x0002, 0x0820, 0xfffc, 0x1060, 0x0820, 0x0840, 0x738d, 0x015b, 0xf79e, 0xffff, 0x632c, 0x0002, 0x0840, 0xfffc, 0x0820, 0x0840, 0x0820, 0x5aca, 0x003a, 0xf79e, 0xfffe, 0x738e, 0x1061, 0x0002, 0x0840, 0x0002, 0x0820, 0xfffe, 0x0840, 0x0820, 0x0005, 0x0840, 0x0002, 0x0820, 0xfffd, 0x1040, 0x0840, 0x0820, 0x0002, 0x0840, 0x0002, 0x0820, 0x0008, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0x0002, 0x0820, 0xffff, 0x1060, 0x0003, 0x0820, 0x0002, 0x0840, 0xffff, 0x1040, 0x0002, 0x0820, 0x0003, 0x0840, 0xffff, 0x8c71, 0x000d, 0xf79e, 0xfffc, 0xbdb6, 0x0860, 0x0840, 0x0820, 0x0002, 0x0840, 0xffff, 0x18c2, 0x015b, 0xf79e, 0xffff, 0x10a1, 0x0003, 0x0840, 0xfffd, 0x0820, 0x0840, 0xce38, 0x0038, 0xf79e, 0xfffc, 0xef7d, 0x5289, 0x0840, 0x0820, 0x0002, 0x0840, 0xfffe, 0x0820, 0x0840, 0x0002, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x0004, 0x0840, 0xfffd, 0x0820, 0x0840, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x000a, 0x0840, 0xfffe, 0x0820, 0x0840, 0x0002, 0x0820, 0x0003, 0x0840, 0xfffe, 0x0820, 0x0840, 0x0002, 0x0820, 0xfffa, 0x1040, 0x0820, 0x0840, 0x0820, 0x0840, 0xb596, 0x000e, 0xf79e, 0xfffe, 0x39c6, 0x0820, 0x0002, 0x0840, 0xfffd, 0x0820, 0x0840, 0x9cf2, 0x0159, 0xf79e, 0xffff, 0x9cd2, 0x0003, 0x0840, 0xfffd, 0x0820, 0x0840, 0x39c6, 0x0038, 0xf79e, 0xfff8, 0xdefb, 0x39a6, 0x1040, 0x0820, 0x0840, 0x0820, 0x0840, 0x0820, 0x0021, 0x0840, 0xffff, 0x0820, 0x0005, 0x0840, 0xfffd, 0x0820, 0x0840, 0x2103, 0x000f, 0xf79e, 0xffff, 0x9cb2, 0x0004, 0x0840, 0xfffe, 0x0820, 0x39c6, 0x0159, 0xf79e, 0xffff, 0x4228, 0x0004, 0x0840, 0xfffe, 0x0820, 0x9cd2, 0x0037, 0xf79e, 0xfffc, 0xd679, 0x2103, 0x0840, 0x0000, 0x0002, 0x0840, 0xfffc, 0x0820, 0x1060, 0x0840, 0x0820, 0x0020, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0x0002, 0x0820, 0xfffc, 0x0840, 0x0820, 0x1061, 0xa4f3, 0x0010, 0xf79e, 0xfffe, 0x18c2, 0x0820, 0x0002, 0x0840, 0xfffd, 0x0820, 0x0860, 0xd6ba, 0x0157, 0xf79e, 0xfffd, 0xdeda, 0x0861, 0x0840, 0x0002, 0x0820, 0xfffe, 0x0840, 0x18c2, 0x0037, 0xf79e, 0xfffc, 0xce38, 0x18c3, 0x0841, 0x0820, 0x0002, 0x0840, 0x0002, 0x0820, 0xfffd, 0x0840, 0x0820, 0x1040, 0x0020, 0x0840, 0xffff, 0x1040, 0x0002, 0x0820, 0xfffb, 0x0840, 0x0820, 0x1061, 0x0840, 0x9471, 0x0011, 0xf79e, 0xfffc, 0x630c, 0x0860, 0x0840, 0x0820, 0x0002, 0x0840, 0xffff, 0x83ef, 0x0157, 0xf79e, 0xffff, 0x8c71, 0x0003, 0x0840, 0x0002, 0x0820, 0xffff, 0x62eb, 0x0036, 0xf79e, 0xfffe, 0xc5f7, 0x18a2, 0x0002, 0x0820, 0x0002, 0x0840, 0xfffd, 0x0820, 0x0840, 0x1040, 0x0002, 0x0820, 0x0021, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xfffc, 0x0820, 0x0840, 0x1081, 0xb595, 0x0012, 0xf79e, 0xfffe, 0xbdd7, 0x0820, 0x0003, 0x0840, 0xfffe, 0x0820, 0x39a6, 0x0157, 0xf79e, 0xfffd, 0x4207, 0x0840, 0x0820, 0x0002, 0x0840, 0xfffe, 0x0820, 0xbdf6, 0x0035, 0xf79e, 0xfffd, 0xc5f7, 0x18a2, 0x0840, 0x0003, 0x0820, 0x0006, 0x0840, 0xffff, 0x0820, 0x0021, 0x0840, 0x0002, 0x0820, 0xfffd, 0x1061, 0x2924, 0xd679, 0x0014, 0xf79e, 0xfffd, 0x2104, 0x0840, 0x0820, 0x0003, 0x0840, 0xffff, 0xd69a, 0x0155, 0xf79e, 0xfffe, 0xe71b, 0x10a2, 0x0002, 0x0820, 0x0002, 0x0840, 0xffff, 0x20e3, 0x0035, 0xf79e, 0xfff9, 0xbdd7, 0x18a2, 0x0800, 0x0820, 0x1040, 0x0840, 0x1040, 0x0003, 0x0840, 0xfffc, 0x0820, 0x0840, 0x1040, 0x0820, 0x0022, 0x0840, 0xfffd, 0x0820, 0x2103, 0xd69a, 0x0015, 0xf79e, 0xfffe, 0x738e, 0x0820, 0x0002, 0x0840, 0xfffd, 0x0820, 0x0840, 0x8c51, 0x0155, 0xf79e, 0xffff, 0xa514, 0x0002, 0x0840, 0x0002, 0x0820, 0xfffe, 0x0840, 0x630b, 0x0034, 0xf79e, 0xfffc, 0xbdd7, 0x18a2, 0x0820, 0x1040, 0x0003, 0x0820, 0xffff, 0x0840, 0x0002, 0x0820, 0x0003, 0x0840, 0x0002, 0x0820, 0x0020, 0x0840, 0xfffc, 0x0820, 0x0840, 0x18c3, 0xce79, 0x0016, 0xf79e, 0xffff, 0xc5f7, 0x0002, 0x0840, 0xfffc, 0x0820, 0x1081, 0x0820, 0x4a48, 0x0155, 0xf79e, 0xfff9, 0x6b4c, 0x0820, 0x0840, 0x0820, 0x0840, 0x0820, 0xad34, 0x0033, 0xf79e, 0xfffe, 0xc617, 0x18a2, 0x0002, 0x0820, 0xffff, 0x0840, 0x0002, 0x0820, 0xffff, 0x1040, 0x0003, 0x0840, 0x0002, 0x0820, 0xfffd, 0x0840, 0x0820, 0x1040, 0x0021, 0x0840, 0xfffe, 0x1081, 0xc5f7, 0x0018, 0xf79e, 0xfffa, 0x20e3, 0x0820, 0x0840, 0x0000, 0x0840, 0x18c2, 0x0155, 0xf79e, 0xffff, 0x2945, 0x0003, 0x0840, 0xfffd, 0x0820, 0x1081, 0xef3c, 0x0032, 0xf79e, 0xfffd, 0xce58, 0x18c2, 0x1060, 0x0002, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x0021, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xfffd, 0x0820, 0x0840, 0x0820, 0x0003, 0x0840, 0xffff, 0x94b2, 0x0019, 0xf79e, 0xfffe, 0x5aaa, 0x1061, 0x0002, 0x0820, 0xfffd, 0x0840, 0x1040, 0xbdd7, 0x0153, 0xf79e, 0xfff9, 0xdefb, 0x1061, 0x0820, 0x0840, 0x0820, 0x0840, 0x39c6, 0x0032, 0xf79e, 0xfffd, 0xd699, 0x2103, 0x1040, 0x0002, 0x0820, 0x0026, 0x0840, 0x0002, 0x0820, 0xfffa, 0x0840, 0x0820, 0x0840, 0x0000, 0x0840, 0x4a48, 0x001a, 0xf79e, 0xfffe, 0x94b2, 0x0820, 0x0002, 0x0840, 0x0002, 0x0820, 0xffff, 0x8c30, 0x0153, 0xf79e, 0xffff, 0xad54, 0x0002, 0x0820, 0xfffc, 0x0840, 0x0820, 0x0840, 0x738d, 0x0031, 0xf79e, 0xfffe, 0xdedb, 0x2944, 0x0003, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x0029, 0x0840, 0xfffd, 0x0860, 0x0861, 0xdeba, 0x001a, 0xf79e, 0xfffc, 0xd69a, 0x0840, 0x0820, 0x1060, 0x0002, 0x0820, 0xffff, 0x4a48, 0x0153, 0xf79e, 0xfff9, 0x73ae, 0x1061, 0x0820, 0x0840, 0x0820, 0x0840, 0xad54, 0x0031, 0xf79e, 0xfffe, 0x39a6, 0x0820, 0x0005, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x0021, 0x0840, 0x0002, 0x0820, 0x0002, 0x0840, 0xfffd, 0x0020, 0x0840, 0x738d, 0x001c, 0xf79e, 0xfffa, 0x2103, 0x0820, 0x0840, 0x0820, 0x0840, 0x2903, 0x0153, 0xf79e, 0xfff9, 0x4a48, 0x0840, 0x0820, 0x0840, 0x0820, 0x1081, 0xdeba, 0x0030, 0xf79e, 0xfffb, 0x4208, 0x0820, 0x1061, 0x0820, 0x0840, 0x0003, 0x0820, 0x0025, 0x0840, 0x0002, 0x0820, 0xfffb, 0x0840, 0x0820, 0x0860, 0x1081, 0xe6fb, 0x001c, 0xf79e, 0xffff, 0x4a48, 0x0004, 0x0820, 0xfffe, 0x1061, 0xdeda, 0x0152, 0xf79e, 0xffff, 0x2124, 0x0002, 0x0820, 0xfffd, 0x0840, 0x0820, 0x2103, 0x0030, 0xf79e, 0xffff, 0x62eb, 0x0003, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x0027, 0x0840, 0xfffd, 0x0820, 0x1060, 0x0840, 0x0002, 0x0820, 0xffff, 0x736d, 0x001d, 0xf79e, 0xffff, 0x73ae, 0x0002, 0x0820, 0xffff, 0x0840, 0x0002, 0x0820, 0xffff, 0xbdb6, 0x0152, 0xf79e, 0xfffd, 0x0861, 0x0840, 0x0820, 0x0002, 0x0840, 0xffff, 0x4207, 0x002f, 0xf79e, 0xfffc, 0x73ae, 0x0820, 0x0840, 0x1040, 0x0002, 0x0820, 0x0029, 0x0840, 0xffff, 0x0800, 0x0002, 0x0840, 0xfffd, 0x0820, 0x10a1, 0xdeda, 0x001d, 0xf79e, 0xffff, 0xa513, 0x0002, 0x0820, 0x0002, 0x0840, 0xfffe, 0x0820, 0x9471, 0x0151, 0xf79e, 0xfff9, 0xce58, 0x0840, 0x0820, 0x0840, 0x0820, 0x0840, 0x6b6d, 0x002a, 0xf79e, 0xfffb, 0xe71b, 0xc618, 0xa513, 0x840f, 0x5aaa, 0x0002, 0x0840, 0x0002, 0x0820, 0x0003, 0x0840, 0x0002, 0x0820, 0x0026, 0x0840, 0xffff, 0x1060, 0x0003, 0x0840, 0xffff, 0x52aa, 0x001e, 0xf79e, 0xfffd, 0xce58, 0x0840, 0x0820, 0x0002, 0x0840, 0xfffe, 0x0820, 0x736d, 0x0151, 0xf79e, 0xfffd, 0xad54, 0x0840, 0x0820, 0x0003, 0x0840, 0xffff, 0x9471, 0x0025, 0xf79e, 0xfff8, 0xce58, 0xa513, 0x6b6d, 0x4207, 0x2924, 0x1061, 0x0820, 0x0840, 0x0004, 0x0820, 0x002d, 0x0840, 0xfffb, 0x0820, 0x0840, 0x0820, 0x0840, 0xb595, 0x001e, 0xf79e, 0xfffe, 0xe6fb, 0x18a2, 0x0002, 0x0820, 0xfffd, 0x0840, 0x0820, 0x4a48, 0x0151, 0xf79e, 0xfffe, 0x9491, 0x0840, 0x0002, 0x0820, 0x0002, 0x0840, 0xffff, 0xad75, 0x0021, 0xf79e, 0xfffb, 0xc617, 0x7bce, 0x4207, 0x18e3, 0x0840, 0x0002, 0x0820, 0x0003, 0x0840, 0xffff, 0x0820, 0x0032, 0x0840, 0xfffc, 0x1040, 0x0820, 0x0860, 0x2124, 0x0020, 0xf79e, 0xfffd, 0x20e3, 0x0820, 0x0840, 0x0002, 0x0820, 0xffff, 0x39a6, 0x0151, 0xf79e, 0xffff, 0x738d, 0x0002, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xffff, 0xce58, 0x001e, 0xf79e, 0xfffb, 0xbdd6, 0x630b, 0x20e3, 0x0840, 0x0860, 0x0006, 0x0840, 0x0002, 0x0820, 0x0032, 0x0840, 0x0002, 0x0820, 0xfffd, 0x0840, 0x0020, 0x6b6d, 0x0020, 0xf79e, 0xfffd, 0x3185, 0x0820, 0x0840, 0x0002, 0x0820, 0xffff, 0x20e3, 0x0151, 0xf79e, 0xffff, 0x5aca, 0x0002, 0x0840, 0xfffc, 0x0820, 0x0840, 0x1061, 0xdefb, 0x001c, 0xf79e, 0xfffc, 0xb5b6, 0x3185, 0x0860, 0x0820, 0x0003, 0x0840, 0xfffe, 0x0820, 0x0860, 0x0007, 0x0840, 0xffff, 0x0820, 0x0032, 0x0840, 0xfffd, 0x0820, 0x0840, 0xbdd6, 0x0020, 0xf79e, 0xfffe, 0x4a48, 0x0820, 0x0002, 0x0840, 0xfffe, 0x0820, 0x1061, 0x0151, 0xf79e, 0xfffd, 0x4a48, 0x0840, 0x0820, 0x0002, 0x0840, 0xffff, 0x1081, 0x001c, 0xf79e, 0xffff, 0x8c51, 0x0005, 0x0840, 0x0002, 0x1040, 0x0002, 0x0820, 0x0002, 0x0840, 0x0002, 0x0820, 0x0036, 0x0840, 0xfffe, 0x0820, 0x18c2, 0x0021, 0xf79e, 0xffff, 0x62eb, 0x0005, 0x0840, 0xffff, 0xe71b, 0x0150, 0xf79e, 0xfffd, 0x41e7, 0x0840, 0x0820, 0x0002, 0x0840, 0xffff, 0x1081, 0x001c, 0xf79e, 0xffff, 0x18e3, 0x0005, 0x0840, 0x0002, 0x0820, 0xffff, 0x1040, 0x0003, 0x0820, 0x0003, 0x0840, 0x0003, 0x0820, 0x0031, 0x0840, 0xfffd, 0x0820, 0x0840, 0x2965, 0x0021, 0xf79e, 0xfff9, 0x736d, 0x0840, 0x0820, 0x0840, 0x0820, 0x0840, 0xd69a, 0x0150, 0xf79e, 0xffff, 0x31a6, 0x0004, 0x0840, 0xffff, 0x18c2, 0x001c, 0xf79e, 0xfffb, 0x2965, 0x0840, 0x0820, 0x0840, 0x0820, 0x0002, 0x0840, 0x0002, 0x0820, 0x0004, 0x0840, 0x0003, 0x0820, 0xfffe, 0x0840, 0x1040, 0x0032, 0x0840, 0xfffe, 0x0820, 0x4a69, 0x0021, 0xf79e, 0xfffd, 0x7bce, 0x0820, 0x0840, 0x0003, 0x0820, 0xffff, 0xce58, 0x0150, 0xf79e, 0xffff, 0x2965, 0x0004, 0x0840, 0xffff, 0x2924, 0x001c, 0xf79e, 0xffff, 0x8410, 0x0002, 0x0840, 0x0002, 0x0820, 0x0005, 0x0840, 0xffff, 0x0820, 0x0006, 0x0840, 0xffff, 0x0820, 0x0031, 0x0840, 0xfffd, 0x0820, 0x0860, 0x5289, 0x0021, 0xf79e, 0xfffd, 0x8c30, 0x0820, 0x0840, 0x0003, 0x0820, 0xffff, 0xce38, 0x0150, 0xf79e, 0xffff, 0x18e3, 0x0004, 0x0840, 0xffff, 0x2103, 0x001d, 0xf79e, 0xfffb, 0x2104, 0x0840, 0x0820, 0x0840, 0x0820, 0x003f, 0x0840, 0xffff, 0x52a9, 0x0021, 0xf79e, 0xffff, 0x8430, 0x0002, 0x0820, 0x0002, 0x0840, 0xfffe, 0x0820, 0xbdd6, 0x0150, 0xf79e, 0xffff, 0x2103, 0x0004, 0x0840, 0xffff, 0x2123, 0x001d, 0xf79e, 0xfffc, 0xad75, 0x0820, 0x0840, 0x0820, 0x0004, 0x0840, 0xffff, 0x0820, 0x003b, 0x0840, 0xffff, 0x5269, 0x0021, 0xf79e, 0xfffd, 0x8c30, 0x0820, 0x0840, 0x0002, 0x0820, 0xfffe, 0x0840, 0xbdd6, 0x0150, 0xf79e, 0xffff, 0x2924, 0x0004, 0x0840, 0xffff, 0x2123, 0x001e, 0xf79e, 0xffff, 0x840f, 0x0003, 0x0820, 0xfffc, 0x0840, 0x0820, 0x0840, 0x1060, 0x003b, 0x0840, 0xffff, 0x4207, 0x0021, 0xf79e, 0xfffc, 0x8c30, 0x0820, 0x0840, 0x0820, 0x0002, 0x0840, 0xffff, 0xc617, 0x0150, 0xf79e, 0xffff, 0x3185, 0x0004, 0x0840, 0xffff, 0x2103, 0x001f, 0xf79e, 0xffff, 0x73ae, 0x0002, 0x0840, 0x0003, 0x0820, 0x003c, 0x0840, 0xffff, 0x2944, 0x0021, 0xf79e, 0xfff9, 0x840f, 0x0820, 0x0840, 0x0820, 0x0840, 0x0820, 0xce58, 0x0150, 0xf79e, 0xffff, 0x39c6, 0x0003, 0x0840, 0xfffe, 0x0820, 0x18a2, 0x0020, 0xf79e, 0xfffd, 0x8c50, 0x1081, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x003a, 0x0840, 0xfffe, 0x0820, 0x18c2, 0x0021, 0xf79e, 0xffff, 0x7bae, 0x0002, 0x0820, 0xffff, 0x0840, 0x0002, 0x0820, 0xffff, 0xd679, 0x0150, 0xf79e, 0xffff, 0x4228, 0x0004, 0x0840, 0xffff, 0x1081, 0x0021, 0xf79e, 0xfffd, 0xbdd7, 0x2945, 0x0840, 0x0003, 0x0820, 0x003a, 0x0840, 0xfffe, 0x1081, 0xef7d, 0x0020, 0xf79e, 0xfffe, 0x630c, 0x0820, 0x0002, 0x0840, 0xfffd, 0x0820, 0x0840, 0xdedb, 0x0150, 0xf79e, 0xffff, 0x5aca, 0x0004, 0x0840, 0xfffe, 0x0860, 0xe71b, 0x0022, 0xf79e, 0xfffd, 0x9492, 0x3165, 0x1061, 0x0002, 0x0820, 0x0039, 0x0840, 0xfffe, 0x0860, 0xce58, 0x0020, 0xf79e, 0xffff, 0x5269, 0x0004, 0x0840, 0xffff, 0x1061, 0x0151, 0xf79e, 0xffff, 0x6b4c, 0x0005, 0x0840, 0xffff, 0xd699, 0x0024, 0xf79e, 0xffff, 0x9492, 0x0002, 0x0820, 0x0037, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xffff, 0xb595, 0x0020, 0xf79e, 0xfffe, 0x4207, 0x0820, 0x0002, 0x0840, 0xfffe, 0x0820, 0x18a2, 0x0151, 0xf79e, 0xffff, 0x840f, 0x0003, 0x0840, 0xfffd, 0x0820, 0x0860, 0xbdb6, 0x0024, 0xf79e, 0xffff, 0x39a6, 0x003c, 0x0840, 0xffff, 0x9491, 0x0020, 0xf79e, 0xfffe, 0x2924, 0x0840, 0x0002, 0x0820, 0xfffe, 0x0840, 0x2924, 0x0151, 0xf79e, 0xffff, 0x9cd2, 0x0002, 0x0840, 0xfffc, 0x0820, 0x0840, 0x0820, 0x9cf3, 0x0023, 0xf79e, 0xffff, 0x4a48, 0x003a, 0x0840, 0xfffc, 0x0820, 0x0840, 0x0820, 0x7bce, 0x0020, 0xf79e, 0xfffe, 0x18a2, 0x0820, 0x0002, 0x0840, 0xfffe, 0x0820, 0x41e7, 0x0151, 0xf79e, 0xfffe, 0xbdd6, 0x0820, 0x0003, 0x0840, 0xfffe, 0x0820, 0x7bce, 0x0021, 0xf79e, 0xfffc, 0xce58, 0x3165, 0x0841, 0x0820, 0x0039, 0x0840, 0xfffc, 0x0820, 0x0840, 0x0820, 0x528a, 0x001f, 0xf79e, 0xfffd, 0xd6ba, 0x0841, 0x0820, 0x0002, 0x0840, 0xfffe, 0x0820, 0x5acb, 0x0151, 0xf79e, 0xfffe, 0xdedb, 0x0820, 0x0002, 0x0840, 0x0002, 0x0820, 0xffff, 0x52aa, 0x0020, 0xf79e, 0xfffe, 0x83ef, 0x1081, 0x0002, 0x0820, 0x003a, 0x0840, 0xfffc, 0x0820, 0x0840, 0x0820, 0x3186, 0x001f, 0xf79e, 0xffff, 0xb596, 0x0002, 0x0840, 0x0002, 0x0820, 0xfffe, 0x0840, 0x7bcf, 0x0152, 0xf79e, 0xffff, 0x18c2, 0x0002, 0x0820, 0x0002, 0x0840, 0xffff, 0x3165, 0x001e, 0xf79e, 0xfffd, 0xad54, 0x2944, 0x0840, 0x0002, 0x0820, 0x003a, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xfffe, 0x0820, 0x20e3, 0x001f, 0xf79e, 0xfffe, 0x8c50, 0x0820, 0x0003, 0x0840, 0xfffe, 0x0820, 0xad34, 0x0152, 0xf79e, 0xfffa, 0x39c6, 0x0820, 0x0840, 0x0820, 0x0840, 0x1082, 0x001c, 0xf79e, 0xfffe, 0xad75, 0x39c6, 0x0003, 0x0840, 0xfffc, 0x0820, 0x1040, 0x0840, 0x0820, 0x0038, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xfffd, 0x0820, 0x18a2, 0xf77d, 0x001e, 0xf79e, 0xffff, 0x5aeb, 0x0002, 0x0820, 0xffff, 0x0840, 0x0002, 0x0820, 0xffff, 0xd699, 0x0152, 0xf79e, 0xfffc, 0x6b4c, 0x0820, 0x0840, 0x0820, 0x0002, 0x0840, 0xffff, 0xbdd7, 0x0019, 0xf79e, 0xfffc, 0x9cf3, 0x31a6, 0x0861, 0x0840, 0x0003, 0x0820, 0xffff, 0x1060, 0x0002, 0x0820, 0x003d, 0x0840, 0xfffe, 0x1061, 0xd699, 0x001e, 0xf79e, 0xffff, 0x3185, 0x0002, 0x0820, 0xfffd, 0x0840, 0x0820, 0x18c2, 0x0153, 0xf79e, 0xfffc, 0x94b2, 0x0840, 0x0820, 0x0840, 0x0002, 0x0820, 0xffff, 0x8c51, 0x0017, 0xf79e, 0xfffe, 0xce38, 0x2103, 0x0003, 0x0840, 0xfffd, 0x0820, 0x0840, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x003b, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xfffe, 0x0820, 0xc617, 0x001d, 0xf79e, 0xfff9, 0xe73c, 0x1061, 0x0820, 0x0840, 0x0820, 0x0840, 0x39c6, 0x0153, 0xf79e, 0xffff, 0xce79, 0x0002, 0x0820, 0x0002, 0x0840, 0xfffe, 0x0820, 0x5289, 0x0018, 0xf79e, 0xfffe, 0xad75, 0x20e3, 0x0004, 0x0840, 0x0002, 0x0820, 0xffff, 0x0840, 0x0002, 0x0820, 0x003d, 0x0840, 0xfffe, 0x0820, 0xad75, 0x001d, 0xf79e, 0xffff, 0xad54, 0x0003, 0x0820, 0xfffd, 0x0840, 0x0820, 0x736d, 0x0154, 0xf79e, 0xffff, 0x18c3, 0x0004, 0x0840, 0xffff, 0x2103, 0x0019, 0xf79e, 0xfffd, 0xe6fb, 0x4228, 0x0840, 0x0003, 0x0820, 0x0003, 0x0840, 0x0002, 0x0820, 0x003d, 0x0840, 0xffff, 0xa513, 0x001d, 0xf79e, 0xfff9, 0x738d, 0x0840, 0x0820, 0x1060, 0x0000, 0x0840, 0xa4f3, 0x0154, 0xf79e, 0xfff9, 0x4a28, 0x0840, 0x0820, 0x0840, 0x0820, 0x0840, 0xc617, 0x001a, 0xf79e, 0xfffe, 0x8c30, 0x1081, 0x0003, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x003d, 0x0840, 0xffff, 0x9491, 0x001d, 0xf79e, 0xffff, 0x31a6, 0x0002, 0x0840, 0xfffc, 0x0000, 0x1060, 0x1061, 0xdeda, 0x0154, 0xf79e, 0xffff, 0x8c50, 0x0002, 0x0820, 0xfffc, 0x0840, 0x0820, 0x0840, 0x7bef, 0x0019, 0xf79e, 0xfffa, 0xdeda, 0xa4f3, 0x39a6, 0x0840, 0x0800, 0x1060, 0x0002, 0x0820, 0x003f, 0x0840, 0xffff, 0x840f, 0x001c, 0xf79e, 0xfffe, 0xdeba, 0x1061, 0x0002, 0x0840, 0xfffd, 0x0820, 0x0840, 0x3165, 0x0155, 0xf79e, 0xffff, 0xce79, 0x0002, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xffff, 0x39c6, 0x0016, 0xf79e, 0xfffd, 0xbdd6, 0x736d, 0x2964, 0x0002, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xfffc, 0x0820, 0x0840, 0x1060, 0x0000, 0x003e, 0x0840, 0xffff, 0x83ef, 0x001c, 0xf79e, 0xfff9, 0x94b2, 0x0820, 0x0840, 0x0820, 0x1040, 0x0820, 0x6b6d, 0x0156, 0xf79e, 0xfffe, 0x2924, 0x0820, 0x0002, 0x0840, 0xfffd, 0x0820, 0x1061, 0xd6ba, 0x0012, 0xf79e, 0xfffd, 0xbdf7, 0x632c, 0x18a2, 0x0004, 0x0840, 0xfffd, 0x0820, 0x1060, 0x0820, 0x0004, 0x0840, 0xffff, 0x0820, 0x003c, 0x0840, 0xfffd, 0x0820, 0x0840, 0x8c30, 0x001c, 0xf79e, 0xffff, 0x4228, 0x0003, 0x0840, 0xfffd, 0x0820, 0x0840, 0xbdd6, 0x0156, 0xf79e, 0xfffe, 0x738d, 0x0820, 0x0003, 0x0840, 0xfffe, 0x0020, 0x8430, 0x000f, 0xf79e, 0xfffd, 0xdedb, 0x8c30, 0x2945, 0x0006, 0x0840, 0xfffe, 0x0820, 0x0840, 0x0002, 0x0820, 0x0002, 0x0840, 0x0002, 0x0820, 0x003d, 0x0840, 0xfffd, 0x0820, 0x0840, 0x9cb2, 0x001b, 0xf79e, 0xfff9, 0xe71b, 0x0861, 0x0820, 0x0840, 0x1040, 0x0840, 0x20e3, 0x0157, 0xf79e, 0xfff9, 0xbdd7, 0x0840, 0x0820, 0x0840, 0x0820, 0x0840, 0x3185, 0x000d, 0xf79e, 0xfffd, 0xce38, 0x630b, 0x18c2, 0x0003, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x0006, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x003d, 0x0840, 0xfffd, 0x0820, 0x0840, 0xa534, 0x001b, 0xf79e, 0xffff, 0x8c71, 0x0002, 0x0840, 0xfffc, 0x0820, 0x0840, 0x0820, 0x5aeb, 0x0158, 0xf79e, 0xffff, 0x2924, 0x0004, 0x0840, 0xfffe, 0x0860, 0xc638, 0x000a, 0xf79e, 0xfff9, 0xc617, 0x4a49, 0x1061, 0x0840, 0x0820, 0x0840, 0x0820, 0x0049, 0x0840, 0xfffb, 0x0820, 0x0840, 0x0860, 0x0820, 0xc617, 0x001b, 0xf79e, 0xfff9, 0x3185, 0x0840, 0x0820, 0x0840, 0x0820, 0x0840, 0xb575, 0x0158, 0xf79e, 0xffff, 0x738d, 0x0002, 0x0840, 0xfffc, 0x0820, 0x0840, 0x0820, 0x62eb, 0x0008, 0xf79e, 0xfff7, 0xd699, 0x5aca, 0x1061, 0x0820, 0x0840, 0x0820, 0x0860, 0x0820, 0x0860, 0x0049, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xfffe, 0x1081, 0xe71b, 0x001a, 0xf79e, 0xffff, 0xbdf7, 0x0002, 0x0840, 0x0002, 0x0820, 0xfffe, 0x0840, 0x18a2, 0x0159, 0xf79e, 0xfff8, 0xd679, 0x1061, 0x0820, 0x1060, 0x0820, 0x0840, 0x1081, 0xe71b, 0x0006, 0xf79e, 0xfffd, 0x7bee, 0x10a2, 0x0840, 0x0002, 0x0820, 0x0003, 0x0840, 0xffff, 0x0820, 0x004c, 0x0840, 0xfffe, 0x0820, 0x3185, 0x001b, 0xf79e, 0xffff, 0x5aeb, 0x0005, 0x0840, 0xffff, 0x736d, 0x015a, 0xf79e, 0xffff, 0x39a6, 0x0003, 0x0840, 0xfffd, 0x0820, 0x0840, 0x840f, 0x0004, 0xf79e, 0xfffc, 0xc618, 0x3185, 0x0020, 0x0820, 0x0002, 0x0840, 0xfffb, 0x0820, 0x0860, 0x0840, 0x0820, 0x1040, 0x0049, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xfffe, 0x0820, 0x7bae, 0x001a, 0xf79e, 0xfffc, 0xdefb, 0x1081, 0x0840, 0x0820, 0x0003, 0x0840, 0xffff, 0xd699, 0x015a, 0xf79e, 0xffff, 0xa4f3, 0x0003, 0x0820, 0x0002, 0x0840, 0xffff, 0x2924, 0x0003, 0xf79e, 0xfffd, 0x8c30, 0x1081, 0x0820, 0x0002, 0x0840, 0xfffe, 0x0820, 0x0840, 0x0002, 0x0820, 0x0002, 0x1060, 0x0002, 0x0820, 0x0048, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xfffe, 0x0861, 0xce58, 0x001a, 0xf79e, 0xfffd, 0x73ae, 0x0840, 0x0820, 0x0003, 0x0840, 0xffff, 0x4207, 0x015c, 0xf79e, 0xffff, 0x20e3, 0x0002, 0x0840, 0xfff8, 0x0860, 0x0840, 0x0820, 0x9cb2, 0xf79e, 0x5acb, 0x0841, 0x0820, 0x0002, 0x0840, 0xfffc, 0x0820, 0x0840, 0x0860, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x004c, 0x0840, 0xfffe, 0x0820, 0x3185, 0x001a, 0xf79e, 0xfff8, 0xef5d, 0x18e3, 0x0820, 0x0840, 0x0820, 0x0840, 0x0820, 0xb575, 0x015c, 0xf79e, 0xfffc, 0x83ef, 0x0820, 0x1060, 0x0820, 0x0002, 0x0840, 0xfffe, 0x2103, 0x41e7, 0x0003, 0x0820, 0x0004, 0x0840, 0xfffe, 0x0820, 0x0840, 0x0002, 0x0820, 0xfffd, 0x1060, 0x0840, 0x0820, 0x004a, 0x0840, 0xfffe, 0x0820, 0x8c30, 0x001a, 0xf79e, 0xffff, 0x8430, 0x0002, 0x0820, 0x0002, 0x0840, 0xfffe, 0x0820, 0x3185, 0x015d, 0xf79e, 0xfff8, 0xf77d, 0x18a2, 0x0820, 0x0840, 0x0820, 0x0840, 0x0820, 0x0840, 0x0002, 0x0820, 0xfffe, 0x0840, 0x0820, 0x0003, 0x0840, 0xfffd, 0x0820, 0x0840, 0x1040, 0x0002, 0x0820, 0x004a, 0x0840, 0xfffc, 0x0820, 0x0840, 0x0860, 0xe6fb, 0x0019, 0xf79e, 0xfff8, 0xe73c, 0x1082, 0x0840, 0x0820, 0x1040, 0x0840, 0x0820, 0x9cb2, 0x015e, 0xf79e, 0xfffe, 0x7bce, 0x0840, 0x0002, 0x0820, 0x0054, 0x0840, 0xffff, 0x0820, 0x0006, 0x0840, 0xffff, 0x4a48, 0x001a, 0xf79e, 0xffff, 0x6b6d, 0x0003, 0x0840, 0x0002, 0x0820, 0xffff, 0x2924, 0x015f, 0xf79e, 0xfffd, 0xe73c, 0x18c2, 0x0820, 0x0052, 0x0840, 0xffff, 0x0820, 0x0008, 0x0840, 0xfffe, 0x0020, 0xad34, 0x0019, 0xf79e, 0xfffe, 0xce79, 0x1060, 0x0002, 0x0840, 0x0002, 0x0820, 0xfffe, 0x0840, 0x9cb2, 0x0160, 0xf79e, 0xffff, 0x840f, 0x0059, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xffff, 0x18e3, 0x001a, 0xf79e, 0xfffe, 0x4a48, 0x0840, 0x0002, 0x0820, 0x0002, 0x0840, 0xffff, 0x3165, 0x0162, 0xf79e, 0xffff, 0x2103, 0x0054, 0x0840, 0x0002, 0x0820, 0x0002, 0x0840, 0xfffc, 0x0820, 0x0840, 0x0820, 0x736d, 0x0019, 0xf79e, 0xfff8, 0xa514, 0x0840, 0x0820, 0x1040, 0x0820, 0x0840, 0x0820, 0xad54, 0x0162, 0xf79e, 0xfffd, 0xa513, 0x1061, 0x0820, 0x0050, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x0004, 0x0840, 0xfffe, 0x0861, 0xce79, 0x0018, 0xf79e, 0xfffe, 0xe71b, 0x2104, 0x0002, 0x0820, 0x0002, 0x0840, 0xfffe, 0x0820, 0x4207, 0x0164, 0xf79e, 0xffff, 0x39e7, 0x0051, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0x0002, 0x0820, 0xffff, 0x41e7, 0x0019, 0xf79e, 0xfffc, 0x5aeb, 0x0000, 0x0840, 0x1040, 0x0002, 0x0820, 0xfffe, 0x1061, 0xce59, 0x0164, 0xf79e, 0xfffd, 0xce79, 0x1061, 0x0840, 0x0003, 0x0820, 0x0051, 0x0840, 0x0002, 0x0820, 0xfffe, 0x0860, 0x9cd3, 0x0018, 0xf79e, 0xfffe, 0xa513, 0x0820, 0x0002, 0x0840, 0x0002, 0x0820, 0xfffe, 0x0840, 0x7bae, 0x0166, 0xf79e, 0xfffe, 0x7bce, 0x0840, 0x0003, 0x0820, 0x004d, 0x0840, 0x0002, 0x0820, 0x0002, 0x0840, 0xfffc, 0x0820, 0x1060, 0x18c2, 0xef7d, 0x0017, 0xf79e, 0xfffe, 0xd6ba, 0x18c2, 0x0003, 0x0820, 0xfffd, 0x0840, 0x0820, 0x3165, 0x0168, 0xf79e, 0xfffd, 0x3185, 0x0820, 0x0840, 0x0002, 0x0820, 0x004b, 0x0840, 0xfffc, 0x0820, 0x0840, 0x1040, 0x0820, 0x0002, 0x0840, 0xfffe, 0x0020, 0x6b4c, 0x0018, 0xf79e, 0xfffe, 0x39c6, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xffff, 0xbdd6, 0x0168, 0xf79e, 0xfffb, 0xc618, 0x1082, 0x0820, 0x0840, 0x0820, 0x004d, 0x0840, 0xfffe, 0x0000, 0x0820, 0x0002, 0x0840, 0xfffe, 0x1061, 0xce58, 0x0017, 0xf79e, 0xfffb, 0x630b, 0x0840, 0x0860, 0x0020, 0x0820, 0x0002, 0x0840, 0xffff, 0x736d, 0x016a, 0xf79e, 0xfffa, 0x8c51, 0x0820, 0x0840, 0x1061, 0x0800, 0x0820, 0x004a, 0x0840, 0xffff, 0x0820, 0x0004, 0x0840, 0xffff, 0x41e7, 0x0017, 0xf79e, 0xfffe, 0x9491, 0x0840, 0x0002, 0x0820, 0x0003, 0x0840, 0xffff, 0x39c6, 0x016c, 0xf79e, 0xffff, 0x5269, 0x0002, 0x0820, 0xffff, 0x1060, 0x0002, 0x0820, 0x0048, 0x0840, 0xffff, 0x0820, 0x0003, 0x0840, 0x0002, 0x0820, 0xffff, 0xa4f3, 0x0016, 0xf79e, 0xfffe, 0xb595, 0x1061, 0x0003, 0x0840, 0xfffc, 0x0820, 0x0840, 0x10a2, 0xd699, 0x016c, 0xf79e, 0xfffe, 0xef5c, 0x2944, 0x0002, 0x0820, 0xfffe, 0x0840, 0x1040, 0x004b, 0x0840, 0xfffd, 0x0820, 0x1061, 0x18c2, 0x0016, 0xf79e, 0xfffe, 0xc617, 0x18c2, 0x0002, 0x0820, 0xfffb, 0x0840, 0x0820, 0x0840, 0x0860, 0xa513, 0x016e, 0xf79e, 0xfffd, 0xc638, 0x10a1, 0x0840, 0x0002, 0x0820, 0x004a, 0x0840, 0xfffc, 0x0860, 0x0840, 0x0000, 0x736d, 0x0015, 0xf79e, 0xfffc, 0xd699, 0x18e3, 0x0820, 0x1060, 0x0002, 0x0820, 0xfffd, 0x1040, 0x0820, 0x738d, 0x0170, 0xf79e, 0xfffd, 0xa513, 0x0840, 0x1060, 0x004b, 0x0840, 0xfffc, 0x0820, 0x0860, 0x0840, 0xdeba, 0x0014, 0xf79e, 0xfffc, 0xd699, 0x2124, 0x0840, 0x0820, 0x0004, 0x0840, 0xffff, 0x4a48, 0x0172, 0xf79e, 0xfffd, 0x840f, 0x0840, 0x0820, 0x004b, 0x0840, 0xfffe, 0x0820, 0x4a28, 0x0014, 0xf79e, 0xfffd, 0xd699, 0x2103, 0x0020, 0x0003, 0x0840, 0x0002, 0x0820, 0xfffe, 0x39a6, 0xef7d, 0x0173, 0xf79e, 0xffff, 0x6b6d, 0x0004, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0x0002, 0x0820, 0x0043, 0x0840, 0xfffe, 0x0820, 0xad54, 0x0013, 0xf79e, 0xfffd, 0xce38, 0x2903, 0x0820, 0x0004, 0x0840, 0xfffd, 0x0820, 0x2944, 0xdedb, 0x0175, 0xf79e, 0xfff9, 0x5aeb, 0x0820, 0x0860, 0x0820, 0x0840, 0x0820, 0x0840, 0x0002, 0x1040, 0x0040, 0x0840, 0x0002, 0x0820, 0xfffe, 0x0840, 0x2965, 0x0013, 0xf79e, 0xfffc, 0xbdd6, 0x20e3, 0x0820, 0x0840, 0x0002, 0x0820, 0xfffc, 0x0840, 0x0820, 0x2103, 0xd69a, 0x0177, 0xf79e, 0xfff8, 0x5289, 0x0020, 0x0840, 0x0820, 0x0840, 0x0820, 0x0840, 0x0820, 0x0042, 0x0840, 0xfffe, 0x0820, 0x8410, 0x0012, 0xf79e, 0xfffc, 0xa534, 0x1081, 0x0840, 0x0820, 0x0003, 0x0840, 0xfffd, 0x0820, 0x18e3, 0xce58, 0x0179, 0xf79e, 0xfffe, 0x5269, 0x0840, 0x0002, 0x0820, 0xffff, 0x1040, 0x0043, 0x0840, 0xfffd, 0x0820, 0x10a2, 0xdefb, 0x0011, 0xf79e, 0xffff, 0x7bef, 0x0002, 0x0840, 0xfffe, 0x0820, 0x0840, 0x0002, 0x0820, 0xfffd, 0x0840, 0x20e3, 0xce58, 0x017b, 0xf79e, 0xffff, 0x62eb, 0x0002, 0x0840, 0xfffd, 0x0820, 0x0840, 0x0820, 0x0042, 0x0840, 0xffff, 0x5aca, 0x0010, 0xf79e, 0xfffd, 0xe71b, 0x5289, 0x0840, 0x0002, 0x0820, 0xfffa, 0x0840, 0x0820, 0x1060, 0x0820, 0x2124, 0xce58, 0x017d, 0xf79e, 0xffff, 0x6b4d, 0x0002, 0x0840, 0xffff, 0x0820, 0x0043, 0x0840, 0xffff, 0xbdf7, 0x000f, 0xf79e, 0xfffc, 0xbdf7, 0x2944, 0x0840, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xfffe, 0x3185, 0xd6ba, 0x017f, 0xf79e, 0xfffe, 0x8c30, 0x0841, 0x0042, 0x0840, 0xfffe, 0x0820, 0x31a6, 0x000f, 0xf79e, 0xfffd, 0x83ef, 0x1081, 0x0840, 0x0002, 0x0820, 0xfffa, 0x0840, 0x0820, 0x0840, 0x0820, 0x41e7, 0xe71b, 0x0181, 0xf79e, 0xfffe, 0xad34, 0x10a2, 0x0042, 0x0840, 0xffff, 0x9cb2, 0x000d, 0xf79e, 0xfffe, 0xce79, 0x39c6, 0x0002, 0x0840, 0xfff9, 0x0820, 0x0840, 0x1060, 0x0820, 0x0840, 0x0820, 0x5aeb, 0x0184, 0xf79e, 0xfffe, 0xce38, 0x2944, 0x0002, 0x0840, 0xffff, 0x0820, 0x0006, 0x0840, 0xffff, 0x0820, 0x0005, 0x0840, 0xffff, 0x0820, 0x0028, 0x0840, 0xffff, 0x0820, 0x0004, 0x0840, 0xfffc, 0x0820, 0x0840, 0x0820, 0x18a2, 0x000d, 0xf79e, 0xfffe, 0x7bce, 0x1081, 0x0003, 0x0840, 0xfffd, 0x0820, 0x0840, 0x0820, 0x0002, 0x1040, 0xffff, 0x8c30, 0x0186, 0xf79e, 0xfffa, 0xef7d, 0x5269, 0x0840, 0x0860, 0x0820, 0x1060, 0x0003, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0x0003, 0x0820, 0x002b, 0x0840, 0x0002, 0x0820, 0x0003, 0x0840, 0xfffd, 0x0820, 0x0840, 0x7bae, 0x000b, 0xf79e, 0xfffe, 0xa534, 0x2124, 0x0003, 0x0840, 0xfff9, 0x0820, 0x0840, 0x0820, 0x0840, 0x0820, 0x20e3, 0xbdd6, 0x0189, 0xf79e, 0xfffd, 0x8c50, 0x1081, 0x0840, 0x0002, 0x0820, 0xffff, 0x0840, 0x0002, 0x0820, 0x0006, 0x0840, 0xffff, 0x0820, 0x0028, 0x0840, 0xfffd, 0x0820, 0x1040, 0x0840, 0x0003, 0x0820, 0xfffd, 0x0840, 0x1061, 0xdeba, 0x0009, 0xf79e, 0xfffe, 0xbdd6, 0x4207, 0x0005, 0x0840, 0xfffa, 0x1061, 0x0840, 0x0820, 0x0840, 0x4a49, 0xe6fb, 0x018b, 0xf79e, 0xfffc, 0xce38, 0x31a5, 0x0860, 0x0820, 0x0002, 0x0840, 0x0004, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x002b, 0x0840, 0xffff, 0x0820, 0x0003, 0x0840, 0xfffe, 0x0820, 0x4a69, 0x0008, 0xf79e, 0xfffc, 0xc617, 0x4a69, 0x0861, 0x0820, 0x0002, 0x0840, 0xfff9, 0x0820, 0x0840, 0x0820, 0x0840, 0x0820, 0x1081, 0x9471, 0x018f, 0xf79e, 0xfffe, 0x7bce, 0x1081, 0x0002, 0x0820, 0x0003, 0x0840, 0xffff, 0x0820, 0x0003, 0x0840, 0xffff, 0x0820, 0x0029, 0x0840, 0xfff9, 0x0820, 0x0840, 0x1060, 0x0000, 0x0840, 0x0820, 0xbdb6, 0x0006, 0xf79e, 0xfff8, 0xb575, 0x4207, 0x0840, 0x0820, 0x0861, 0x0820, 0x0840, 0x0820, 0x0002, 0x0840, 0xfffc, 0x0841, 0x0820, 0x4228, 0xd699, 0x0191, 0xf79e, 0xfffe, 0xce59, 0x4a28, 0x0003, 0x0820, 0x0002, 0x0840, 0x0002, 0x0820, 0x002a, 0x0840, 0xfffc, 0x0820, 0x0840, 0x0820, 0x0840, 0x0002, 0x0820, 0xffff, 0x39a6, 0x0004, 0xf79e, 0xfffd, 0xef5c, 0x8c71, 0x2944, 0x0004, 0x0840, 0xffff, 0x0820, 0x0003, 0x0840, 0xfffc, 0x0820, 0x0840, 0x18a2, 0x9cd3, 0x0195, 0xf79e, 0xfffc, 0xa514, 0x2924, 0x1060, 0x0800, 0x0002, 0x1040, 0x0002, 0x0820, 0x0029, 0x0840, 0xffff, 0x0820, 0x0005, 0x0840, 0xffff, 0x9491, 0x0002, 0xf79e, 0xfffc, 0xad75, 0x5289, 0x1081, 0x0820, 0x0002, 0x0840, 0xfffb, 0x0820, 0x0840, 0x0820, 0x0840, 0x1040, 0x0002, 0x0820, 0xfffe, 0x1081, 0x6b2c, 0x0199, 0xf79e, 0xfffd, 0x83ef, 0x20e3, 0x0820, 0x002d, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xfff8, 0x0820, 0x1081, 0x9471, 0x5aca, 0x18c2, 0x0820, 0x0840, 0x0000, 0x0007, 0x0840, 0xfffc, 0x0820, 0x1061, 0x52a9, 0xd679, 0x019b, 0xf79e, 0xfffd, 0xe71c, 0x73ae, 0x18c3, 0x0002, 0x0820, 0xfffe, 0x0840, 0x0820, 0x0003, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0x0002, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x0004, 0x0840, 0xffff, 0x0820, 0x0003, 0x0840, 0x0002, 0x0820, 0x000b, 0x0840, 0x0002, 0x0820, 0x0005, 0x0840, 0xffff, 0x1040, 0x0002, 0x0820, 0xffff, 0x0840, 0x0004, 0x0820, 0xfffe, 0x0840, 0x0820, 0x0006, 0x0840, 0xfffb, 0x0820, 0x0840, 0x0841, 0x4a49, 0xc638, 0x019f, 0xf79e, 0xfffd, 0xef7d, 0x8410, 0x2103, 0x0002, 0x0820, 0x0003, 0x0840, 0xfffb, 0x1040, 0x0840, 0x0820, 0x0840, 0x0820, 0x0004, 0x0840, 0x0002, 0x0820, 0x0007, 0x0840, 0x0002, 0x0820, 0x000f, 0x0840, 0x0003, 0x0820, 0x0002, 0x1040, 0x0005, 0x0840, 0xffff, 0x0820, 0x0003, 0x0840, 0x0002, 0x0820, 0xfffc, 0x0840, 0x0861, 0x5aeb, 0xc638, 0x01a4, 0xf79e, 0xfffe, 0xa4f3, 0x39c6, 0x0002, 0x0820, 0xfffe, 0x0840, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0x0003, 0x0820, 0x000a, 0x0840, 0xffff, 0x1040, 0x000b, 0x0840, 0x0002, 0x0820, 0x0005, 0x0840, 0x0003, 0x0820, 0x0002, 0x0840, 0x0002, 0x0820, 0xfffd, 0x0840, 0x0820, 0x0840, 0x0002, 0x0820, 0xfffd, 0x18c3, 0x7bae, 0xdeda, 0x01a8, 0xf79e, 0xfffb, 0xce79, 0x736d, 0x2103, 0x0840, 0x0820, 0x0003, 0x0840, 0x0002, 0x0820, 0x0005, 0x0840, 0xffff, 0x0820, 0x0005, 0x0840, 0x0002, 0x0820, 0x0008, 0x0840, 0xffff, 0x0820, 0x0006, 0x0840, 0xffff, 0x0820, 0x0003, 0x0840, 0x0004, 0x0820, 0x0004, 0x0840, 0xfffd, 0x1081, 0x4a69, 0xad34, 0x01ae, 0xf79e, 0xfffd, 0xb595, 0x632c, 0x2103, 0x0002, 0x0840, 0x0004, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0x0002, 0x0820, 0x000c, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xfffe, 0x0820, 0x0840, 0x0002, 0x0820, 0xfffe, 0x0840, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0x0002, 0x0820, 0xfffc, 0x10a2, 0x4207, 0x9cd2, 0xdeda, 0x01b3, 0xf79e, 0xfffb, 0xc638, 0x7bce, 0x41e7, 0x1061, 0x0820, 0x0002, 0x0840, 0xfffe, 0x0820, 0x0840, 0x0002, 0x0820, 0x0002, 0x0840, 0x0003, 0x0820, 0x000b, 0x0840, 0x0002, 0x0820, 0x0002, 0x0840, 0xffff, 0x0820, 0x0002, 0x0840, 0xfff8, 0x0820, 0x0020, 0x0840, 0x1061, 0x2924, 0x632c, 0xad54, 0xe71b, 0x01b9, 0xf79e, 0xfffb, 0xef5c, 0xbdd6, 0x83ef, 0x4a49, 0x2924, 0x0002, 0x0840, 0x0002, 0x0820, 0x0003, 0x0840, 0x000b, 0x0820, 0xffff, 0x0840, 0x0002, 0x0820, 0xffff, 0x0840, 0x0002, 0x0820, 0xfffa, 0x0840, 0x18c2, 0x41e7, 0x738d, 0xa534, 0xdeba, 0x01c2, 0xf79e, 0xfff8, 0xef5d, 0xc5f7, 0xa513, 0x7bce, 0x5aeb, 0x4228, 0x3165, 0x18c2, 0x0009, 0x0840, 0xfff8, 0x18a2, 0x2924, 0x39c6, 0x5289, 0x736d, 0x9471, 0xb5b6, 0xdeda, 0x01d4, 0xf79e, 0x0002, 0xf77d, 0x10fa, 0xf79e, 0xffff, 0xf7be, 0x017e, 0xf79e, 0xffff, 0xf7be, 0x0019, 0xf79e, 0xffff, 0xf7be, 0x0217, 0xf79e, 0xffff, 0xf7be, 0x000f, 0xf79e, 0xffff, 0xf7be, 0x232d, 0xf79e, 0xffff, 0xf7be, 0x0d25, 0xf79e, 0xfffe, 0xf6b7, 0x79c8, 0x0003, 0x31c8, 0xffff, 0x7dde, 0x0007, 0xf79e, 0xfffe, 0xd5d0, 0x51c8, 0x0002, 0x31c8, 0xfffe, 0x31cc, 0x7dde, 0x0007, 0xf79e, 0xfffe, 0xf797, 0x9ac8, 0x0002, 0x31c8, 0xfffe, 0x31cc, 0x9ebe, 0x0007, 0xf79e, 0xfffd, 0xf6b7, 0x9cf0, 0x52cc, 0x0004, 0x31c8, 0xfffc, 0x32cc, 0x52d0, 0x9ddb, 0xd79e, 0x0008, 0xf79e, 0xffff, 0xd5d0, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xbf9e, 0x0009, 0xf79e, 0xfffe, 0xf5d0, 0x51c8, 0x000a, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x000d, 0xf79e, 0xffff, 0xd5d0, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xbcec, 0x0003, 0x31c8, 0xfffc, 0x53f7, 0xf79e, 0xf79b, 0x9ac8, 0x000f, 0x31c8, 0xfffb, 0x32d3, 0xd79e, 0xf79e, 0xf5d0, 0x51c8, 0x000b, 0x31c8, 0xffff, 0x7dde, 0x0145, 0xf79e, 0xfffe, 0xf6b3, 0x51c8, 0x0003, 0x31c8, 0xffff, 0x33f7, 0x0007, 0xf79e, 0xffff, 0xbbe8, 0x0004, 0x31c8, 0xffff, 0x33f7, 0x0007, 0xf79e, 0xfffe, 0xf6b3, 0x51c8, 0x0002, 0x31c8, 0xfffe, 0x31cc, 0x9ebe, 0x0005, 0xf79e, 0xfffe, 0xf6b7, 0x7ac8, 0x000a, 0x31c8, 0xfffd, 0x31cc, 0x7cf7, 0xd79e, 0x0006, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xd4ec, 0x000b, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x000d, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffc, 0x32d3, 0xd79e, 0xf797, 0x79c8, 0x000f, 0x31c8, 0xfffc, 0x31d0, 0xbf9e, 0xf79e, 0xd4ec, 0x000c, 0x31c8, 0xffff, 0x54fb, 0x0145, 0xf79e, 0xfffe, 0xf79b, 0x9ac8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0005, 0xf79e, 0xfffe, 0xf797, 0x79c8, 0x0004, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0006, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0004, 0xf79e, 0xfffe, 0xf5d0, 0x51c8, 0x000d, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0005, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xd4ec, 0x000b, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x000d, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffc, 0x32d3, 0xd79e, 0xf79b, 0x9ac8, 0x000f, 0x31c8, 0xfffc, 0x32d3, 0xd79e, 0xf79e, 0xd4ec, 0x000c, 0x31c8, 0xffff, 0x7dde, 0x0146, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x31cc, 0x9ebe, 0x0005, 0xf79e, 0xfffe, 0xf6b3, 0x51c8, 0x0004, 0x31c8, 0xfffe, 0x31cc, 0x9ebe, 0x0006, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xffff, 0x54fb, 0x0004, 0xf79e, 0xffff, 0xf5d0, 0x0004, 0x31c8, 0xfffd, 0x31cc, 0x7cf7, 0xd6be, 0x0002, 0xf79e, 0xfffd, 0xf79b, 0xd5d0, 0x51c8, 0x0004, 0x31c8, 0xffff, 0x33f7, 0x0005, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0015, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x014e, 0xf79e, 0xffff, 0xf5d0, 0x0004, 0x31c8, 0xffff, 0x7dde, 0x0005, 0xf79e, 0xffff, 0xd4ec, 0x0006, 0x31c8, 0xffff, 0x54fb, 0x0005, 0xf79e, 0xfffe, 0xf797, 0x79c8, 0x0003, 0x31c8, 0xffff, 0x7dde, 0x0003, 0xf79e, 0xfffe, 0xf797, 0x79c8, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbebe, 0x0006, 0xf79e, 0xfffe, 0xf797, 0x79c8, 0x0004, 0x31c8, 0xffff, 0x7dde, 0x0004, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0015, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x014e, 0xf79e, 0xfffe, 0xf797, 0x79c8, 0x0003, 0x31c8, 0xffff, 0x54fb, 0x0005, 0xf79e, 0xffff, 0xbbe8, 0x0006, 0x31c8, 0xffff, 0x33f7, 0x0005, 0xf79e, 0xfffe, 0xf6b3, 0x51c8, 0x0002, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0003, 0xf79e, 0xffff, 0xd4ec, 0x0004, 0x31c8, 0xffff, 0x7dde, 0x0008, 0xf79e, 0xfffe, 0xf6b3, 0x51c8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0003, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0015, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x014e, 0xf79e, 0xfffe, 0xf79b, 0x9ac8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0003, 0xf79e, 0xfffe, 0xf797, 0x79c8, 0x0006, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0004, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xffff, 0x33f7, 0x0003, 0xf79e, 0xfffe, 0xf79b, 0x9ac8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0008, 0xf79e, 0xfffe, 0xf79b, 0x9ac8, 0x0003, 0x31c8, 0xfffe, 0x31cc, 0x9ebe, 0x0003, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0015, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x014f, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0003, 0xf79e, 0xfffe, 0xf6b3, 0x51c8, 0x0002, 0x31c8, 0xfffe, 0x33f0, 0x51c8, 0x0002, 0x31c8, 0xfffe, 0x31cc, 0x9ebe, 0x0004, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xffff, 0x54fb, 0x0003, 0xf79e, 0xfffe, 0xf6b3, 0x51c8, 0x0003, 0x31c8, 0xffff, 0x54fb, 0x000a, 0xf79e, 0xffff, 0xd4ec, 0x0004, 0x31c8, 0xffff, 0x7dde, 0x0003, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0015, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x014f, 0xf79e, 0xffff, 0xf5d0, 0x0003, 0x31c8, 0xfffe, 0x31cc, 0x9ebe, 0x0003, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x7ddb, 0x9ac8, 0x0003, 0x31c8, 0xffff, 0x54fb, 0x0003, 0xf79e, 0xfffe, 0xf797, 0x79c8, 0x0002, 0x31c8, 0xfffe, 0x31cc, 0x9ebe, 0x0003, 0xf79e, 0xffff, 0xf5d0, 0x0004, 0x31c8, 0xffff, 0x7dde, 0x000a, 0xf79e, 0xffff, 0xf5d0, 0x0004, 0x31c8, 0xffff, 0x54fb, 0x0003, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0015, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x014f, 0xf79e, 0xfffe, 0xf797, 0x79c8, 0x0003, 0x31c8, 0xffff, 0x54fb, 0x0003, 0xf79e, 0xffff, 0xbbe8, 0x0002, 0x31c8, 0xfffd, 0x31cc, 0x9ebe, 0xbbe8, 0x0003, 0x31c8, 0xffff, 0x33f7, 0x0003, 0xf79e, 0xfffe, 0xf6b3, 0x51c8, 0x0002, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0003, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31cc, 0x9ebe, 0x000a, 0xf79e, 0xfffe, 0xf6b3, 0x51c8, 0x0003, 0x31c8, 0xffff, 0x54fb, 0x0003, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0015, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xd4ec, 0x000a, 0x31c8, 0xfffe, 0x31cc, 0x9ebe, 0x0148, 0xf79e, 0xfffe, 0xf79b, 0x9ac8, 0x0003, 0x31c8, 0xffff, 0x33f7, 0x0002, 0xf79e, 0xfffe, 0xf79b, 0x9ac8, 0x0002, 0x31c8, 0xfffd, 0x32d3, 0xd79e, 0xf5d0, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0002, 0xf79e, 0xffff, 0xf5d0, 0x0003, 0x31c8, 0xffff, 0x33f7, 0x0004, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31cc, 0x9ebe, 0x000a, 0xf79e, 0xfffe, 0xf6b3, 0x51c8, 0x0003, 0x31c8, 0xffff, 0x33f7, 0x0003, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xd4ec, 0x000b, 0x31c8, 0xffff, 0x7dde, 0x000e, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xd4ec, 0x000a, 0x31c8, 0xfffe, 0x31cc, 0x9ebe, 0x0149, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffb, 0x31d0, 0xbf9e, 0xf79e, 0xf6b3, 0x51c8, 0x0002, 0x31c8, 0xfffc, 0x33f7, 0xf79e, 0xf797, 0x79c8, 0x0003, 0x31c8, 0xffff, 0x7dde, 0x0002, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xffff, 0x7dde, 0x0004, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31cc, 0x9ebe, 0x000a, 0xf79e, 0xfffe, 0xf6b3, 0x51c8, 0x0003, 0x31c8, 0xffff, 0x54fb, 0x0003, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xd4ec, 0x000b, 0x31c8, 0xffff, 0x54fb, 0x000e, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xd4ec, 0x000a, 0x31c8, 0xfffe, 0x31cc, 0x9ebe, 0x0149, 0xf79e, 0xfffe, 0xf6b3, 0x51c8, 0x0002, 0x31c8, 0xfffc, 0x31cc, 0x9ebe, 0xf79e, 0xf5d0, 0x0003, 0x31c8, 0xfffc, 0x7dde, 0xf79e, 0xf79b, 0x9ac8, 0x0003, 0x31c8, 0xfffc, 0x54fb, 0xf79e, 0xf79b, 0x9ac8, 0x0002, 0x31c8, 0xfffe, 0x31cc, 0x9ebe, 0x0004, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31cc, 0x9ebe, 0x000a, 0xf79e, 0xfffe, 0xf6b3, 0x51c8, 0x0003, 0x31c8, 0xffff, 0x54fb, 0x0003, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xd4ec, 0x000b, 0x31c8, 0xfffc, 0x7dde, 0xf79e, 0xf79b, 0x9ac8, 0x0007, 0x31c8, 0xffff, 0x54fb, 0x0003, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0150, 0xf79e, 0xfffe, 0xf797, 0x79c8, 0x0003, 0x31c8, 0xfffd, 0x7dde, 0xf79e, 0xbbe8, 0x0002, 0x31c8, 0xfffe, 0x31cc, 0x9ebe, 0x0002, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffc, 0x32d3, 0xd79e, 0xf6b3, 0x51c8, 0x0002, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0004, 0xf79e, 0xffff, 0xd4ec, 0x0004, 0x31c8, 0xffff, 0x7dde, 0x000a, 0xf79e, 0xffff, 0xf5d0, 0x0004, 0x31c8, 0xffff, 0x7dde, 0x0003, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0008, 0xf79e, 0xfffe, 0xf797, 0x79c8, 0x0007, 0x31c8, 0xffff, 0x33f7, 0x0003, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0151, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffd, 0x33f7, 0xf79b, 0x9ac8, 0x0002, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0002, 0xf79e, 0xffff, 0xf5d0, 0x0003, 0x31c8, 0xfffd, 0x31d0, 0xbf9e, 0xf5d0, 0x0003, 0x31c8, 0xffff, 0x54fb, 0x0005, 0xf79e, 0xffff, 0xf5d0, 0x0004, 0x31c8, 0xffff, 0x54fb, 0x000a, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31cc, 0x9ebe, 0x0003, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0008, 0xf79e, 0xfffe, 0xf79b, 0x9ac8, 0x0007, 0x31c8, 0xffff, 0x54fb, 0x0003, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0151, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffd, 0x32d3, 0xd6b3, 0x51c8, 0x0002, 0x31c8, 0xffff, 0x33f7, 0x0003, 0xf79e, 0xfffe, 0xf797, 0x79c8, 0x0003, 0x31c8, 0xfffe, 0x7dde, 0xbbe8, 0x0003, 0x31c8, 0xffff, 0x7dde, 0x0005, 0xf79e, 0xfffe, 0xf797, 0x79c8, 0x0003, 0x31c8, 0xffff, 0x33f7, 0x0009, 0xf79e, 0xfffe, 0xf79b, 0x9ac8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0003, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0015, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0151, 0xf79e, 0xfffe, 0xf6b3, 0x51c8, 0x0002, 0x31c8, 0xfffe, 0x31cc, 0x9cf0, 0x0003, 0x31c8, 0xffff, 0x7dde, 0x0003, 0xf79e, 0xfffe, 0xf79b, 0x9ac8, 0x0003, 0x31c8, 0xfffe, 0x54f3, 0x9ac8, 0x0002, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0005, 0xf79e, 0xfffe, 0xf79b, 0x9ac8, 0x0003, 0x31c8, 0xfffe, 0x31cc, 0x9ebe, 0x0008, 0xf79e, 0xffff, 0xf5d0, 0x0004, 0x31c8, 0xffff, 0x54fb, 0x0004, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0015, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0151, 0xf79e, 0xfffe, 0xf79b, 0x9ac8, 0x0006, 0x31c8, 0xfffe, 0x31cc, 0x9ebe, 0x0004, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x32cc, 0x51c8, 0x0002, 0x31c8, 0xffff, 0x33f7, 0x0007, 0xf79e, 0xffff, 0xf5d0, 0x0004, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0006, 0xf79e, 0xfffe, 0xf6b3, 0x51c8, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0004, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0015, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0152, 0xf79e, 0xffff, 0xbbe8, 0x0006, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0004, 0xf79e, 0xfffe, 0xf6b3, 0x51c8, 0x0006, 0x31c8, 0xffff, 0x54fb, 0x0008, 0xf79e, 0xffff, 0xbbe8, 0x0004, 0x31c8, 0xfffd, 0x32d0, 0x9ddb, 0xd79e, 0x0002, 0xf79e, 0xfffd, 0xf6bb, 0xbcf0, 0x51c8, 0x0004, 0x31c8, 0xffff, 0x7dde, 0x0005, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0015, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0152, 0xf79e, 0xffff, 0xf5d0, 0x0006, 0x31c8, 0xffff, 0x33f7, 0x0005, 0xf79e, 0xfffe, 0xf797, 0x79c8, 0x0005, 0x31c8, 0xfffe, 0x31cc, 0x9ebe, 0x0008, 0xf79e, 0xfffe, 0xf79b, 0x9ac8, 0x000d, 0x31c8, 0xfffe, 0x31cc, 0x7ddb, 0x0006, 0xf79e, 0xffff, 0xd4ec, 0x000b, 0x31c8, 0xffff, 0x54fb, 0x0002, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0015, 0xf79e, 0xffff, 0xd4ec, 0x000b, 0x31c8, 0xffff, 0x54fb, 0x0002, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xd4ec, 0x000c, 0x31c8, 0xffff, 0x7dde, 0x014a, 0xf79e, 0xfffe, 0xf6b3, 0x51c8, 0x0005, 0x31c8, 0xffff, 0x54fb, 0x0006, 0xf79e, 0xffff, 0xbbe8, 0x0005, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0009, 0xf79e, 0xfffd, 0xf79b, 0xbcf0, 0x51c8, 0x000a, 0x31c8, 0xfffe, 0x32d0, 0xbebe, 0x0007, 0xf79e, 0xffff, 0xd4ec, 0x000b, 0x31c8, 0xffff, 0x33f7, 0x0002, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x31d0, 0xbf9e, 0x0015, 0xf79e, 0xffff, 0xd4ec, 0x000b, 0x31c8, 0xffff, 0x33f7, 0x0002, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xbbe8, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0007, 0xf79e, 0xffff, 0xd4ec, 0x000c, 0x31c8, 0xffff, 0x54fb, 0x014b, 0xf79e, 0xffff, 0xbbec, 0x0004, 0x31c8, 0xfffe, 0x32d0, 0xbf9e, 0x0006, 0xf79e, 0xfffe, 0xf5d0, 0x51c8, 0x0003, 0x31c8, 0xfffe, 0x31cc, 0x7cfb, 0x000c, 0xf79e, 0xfffc, 0xf79b, 0xd5d3, 0x7acc, 0x52c8, 0x0004, 0x31c8, 0xfffd, 0x52cc, 0x7cf3, 0xbebe, 0x0009, 0xf79e, 0xfffe, 0xf6b3, 0x51c8, 0x000a, 0x31c8, 0xffff, 0x54fb, 0x0002, 0xf79e, 0xffff, 0xd5d0, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0015, 0xf79e, 0xfffe, 0xf6b3, 0x51c8, 0x000a, 0x31c8, 0xffff, 0x54fb, 0x0002, 0xf79e, 0xffff, 0xbcec, 0x0003, 0x31c8, 0xffff, 0x53f7, 0x0008, 0xf79e, 0xffff, 0xbcec, 0x0003, 0x31c8, 0xffff, 0x53f7, 0x0008, 0xf79e, 0xfffe, 0xf5d0, 0x51c8, 0x000b, 0x31c8, 0xffff, 0x7dde, 0x1896, 0xf79e, 0xfffc, 0xf79b, 0x9ac8, 0x31c8, 0x54fb, 0x01dc, 0xf79e, 0xfffc, 0xf79b, 0x9ac8, 0x31c8, 0x54fb, 0x0013, 0xf79e, 0xfffc, 0xf79b, 0x9ac8, 0x31c8, 0x33f7, 0x0004, 0xf79e, 0xfffc, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0x0003, 0xf79e, 0xfffe, 0xf79b, 0x9ac8, 0x0002, 0x31c8, 0xffff, 0x54fb, 0x0005, 0xf79e, 0xfffd, 0xf6bb, 0xbbec, 0x51c8, 0x0002, 0x31c8, 0xfffe, 0x32d0, 0x9ebe, 0x0003, 0xf79e, 0xffff, 0xbbe8, 0x0005, 0x31c8, 0xfffe, 0x32d0, 0x9ddb, 0x0003, 0xf79e, 0xffff, 0xbbe8, 0x0006, 0x31c8, 0xffff, 0x7dde, 0x0003, 0xf79e, 0xfffe, 0xd5d3, 0x7acc, 0x0003, 0x31c8, 0xfffd, 0x32cc, 0x7cf7, 0xd79e, 0x0188, 0xf79e, 0xfffc, 0xf79b, 0x9ac8, 0x31c8, 0x54fb, 0x0013, 0xf79e, 0xfffc, 0xf79b, 0x9ac8, 0x31c8, 0x33f7, 0x0004, 0xf79e, 0xfffc, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0x0003, 0xf79e, 0xfffe, 0xf6b3, 0x51c8, 0x0002, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0003, 0xf79e, 0xfffe, 0xf79b, 0x9ac8, 0x0005, 0x31c8, 0xfffe, 0x31cc, 0x9ebe, 0x0002, 0xf79e, 0xffff, 0xbbe8, 0x0007, 0x31c8, 0xfffc, 0x7dde, 0xf79e, 0xf79b, 0x9ac8, 0x0006, 0x31c8, 0xffff, 0x7dde, 0x0002, 0xf79e, 0xffff, 0xbbec, 0x0007, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0187, 0xf79e, 0xfffc, 0xf79b, 0x9ac8, 0x31c8, 0x54fb, 0x0013, 0xf79e, 0xfffc, 0xf79b, 0x9ac8, 0x31c8, 0x33f7, 0x0004, 0xf79e, 0xfffc, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0x0003, 0xf79e, 0xfffa, 0xbbe8, 0x31c8, 0x54f3, 0x51c8, 0x31cc, 0x9ebe, 0x0003, 0xf79e, 0xfffa, 0xf797, 0x7acc, 0x7ddb, 0xd79e, 0xf79e, 0xd4ec, 0x0002, 0x31c8, 0xffff, 0x54fb, 0x0002, 0xf79e, 0xfff2, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0xf79e, 0xf6b7, 0x79c8, 0x31c8, 0x32d3, 0xd79e, 0xf79b, 0x9ac8, 0x31c8, 0x33f7, 0x0006, 0xf79e, 0xffff, 0xf5d0, 0x0002, 0x31c8, 0xfffb, 0x33f7, 0xd79e, 0xf79e, 0xf79b, 0xbbec, 0x0002, 0x31c8, 0xffff, 0x54fb, 0x0187, 0xf79e, 0xfffb, 0xf79b, 0x9ac8, 0x31c8, 0x54f7, 0x9bec, 0x0002, 0x31c8, 0xfffa, 0x53f3, 0xd79e, 0xf79b, 0xbbe8, 0x31c8, 0x33f7, 0x0003, 0xf79e, 0xfffc, 0xd4ec, 0x31c8, 0x32d3, 0xd79e, 0x0003, 0xf79e, 0xfffc, 0xf79b, 0x9ac8, 0x31c8, 0x33f7, 0x0004, 0xf79e, 0xfffc, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0x0002, 0xf79e, 0xfff9, 0xf797, 0x79c8, 0x31cc, 0x9ebb, 0x9ac8, 0x31c8, 0x54fb, 0x0008, 0xf79e, 0xfffc, 0xf6b3, 0x51c8, 0x31c8, 0x54fb, 0x0002, 0xf79e, 0xfffc, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0x0002, 0xf79e, 0xfff8, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0xf79b, 0x9ac8, 0x31c8, 0x33f7, 0x0005, 0xf79e, 0xfffb, 0xf79b, 0x9ac8, 0x31c8, 0x32d3, 0xd79e, 0x0004, 0xf79e, 0xfffc, 0xbbe8, 0x31c8, 0x31d0, 0xbf9e, 0x0186, 0xf79e, 0xfffe, 0xf79b, 0x9ac8, 0x0006, 0x31c8, 0xfff5, 0x33f7, 0xf79e, 0xd4ec, 0x31c8, 0x31d0, 0xbf9e, 0xf79e, 0xf79b, 0x9ac8, 0x31c8, 0x54fb, 0x0004, 0xf79e, 0xfffc, 0xf79b, 0x9ac8, 0x31c8, 0x33f7, 0x0004, 0xf79e, 0xfffc, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0x0002, 0xf79e, 0xfff8, 0xf5d0, 0x31c8, 0x32d3, 0xd79e, 0xd4ec, 0x31c8, 0x32d3, 0xd79e, 0x0006, 0xf79e, 0xfffb, 0xf79b, 0xbbe8, 0x31c8, 0x31cc, 0x9ebe, 0x0002, 0xf79e, 0xfff2, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0xf79e, 0xf6b7, 0x79c8, 0x31c8, 0x33f7, 0xf79e, 0xf79b, 0x9ac8, 0x31c8, 0x33f7, 0x0005, 0xf79e, 0xfffc, 0xf6b3, 0x51c8, 0x31c8, 0x54fb, 0x0005, 0xf79e, 0xfffc, 0xd4ec, 0x31c8, 0x31cc, 0x9ebe, 0x0117, 0xf79e, 0xffff, 0xb5d7, 0x0002, 0x52ec, 0xfffe, 0x8c92, 0xef7d, 0x006a, 0xf79e, 0xffed, 0xf79b, 0x9ac8, 0x31c8, 0x31cc, 0x9ebe, 0xf79b, 0xbbe8, 0x31c8, 0x31cc, 0x9ebe, 0xf797, 0x79c8, 0x31c8, 0x7dde, 0xf79e, 0xf6b3, 0x51c8, 0x31cc, 0x9ebe, 0x0004, 0xf79e, 0xfffc, 0xf79b, 0x9ac8, 0x31c8, 0x33f7, 0x0004, 0xf79e, 0xfffc, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0x0002, 0xf79e, 0xfff8, 0xbbe8, 0x31c8, 0x54fb, 0xf79e, 0xf6b3, 0x51c8, 0x31cc, 0x9ebe, 0x0003, 0xf79e, 0xfffe, 0xf797, 0x79c8, 0x0003, 0x31c8, 0xfffe, 0x32d0, 0x9ebe, 0x0003, 0xf79e, 0xffff, 0xbbe8, 0x0006, 0x31c8, 0xfffb, 0x32d3, 0xd79e, 0xf79e, 0xf79b, 0x9ac8, 0x0005, 0x31c8, 0xfffa, 0x33f7, 0xf79e, 0xf6b3, 0x51c8, 0x31c8, 0x7dde, 0x0005, 0xf79e, 0xfffc, 0xf5d0, 0x31c8, 0x31cc, 0x9ebe, 0x0117, 0xf79e, 0xffff, 0xb5d7, 0x0002, 0x52ec, 0xfffe, 0x8c92, 0xef7d, 0x006a, 0xf79e, 0xfffc, 0xf79b, 0x9ac8, 0x31c8, 0x54fb, 0x0002, 0xf79e, 0xfff3, 0xf6b3, 0x51c8, 0x31c8, 0x7dde, 0xf79e, 0xbbe8, 0x31c8, 0x33f7, 0xf79e, 0xd4ec, 0x31c8, 0x32d3, 0xd79e, 0x0004, 0xf79e, 0xfffc, 0xf79b, 0x9ac8, 0x31c8, 0x33f7, 0x0004, 0xf79e, 0xfff2, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0xf79e, 0xf797, 0x79c8, 0x31cc, 0x9ebe, 0xf79e, 0xf79b, 0x9ac8, 0x31c8, 0x54fb, 0x0003, 0xf79e, 0xfffe, 0xf797, 0x79c8, 0x0004, 0x31c8, 0xfffe, 0x32d0, 0x9ebe, 0x0002, 0xf79e, 0xffff, 0xbbe8, 0x0005, 0x31c8, 0xfffe, 0x32d3, 0xbf9e, 0x0002, 0xf79e, 0xfffe, 0xf79b, 0x9ac8, 0x0005, 0x31c8, 0xfffa, 0x33f7, 0xf79e, 0xf6b3, 0x51c8, 0x31c8, 0x7dde, 0x0005, 0xf79e, 0xfffc, 0xf5d0, 0x31c8, 0x31cc, 0x9ebe, 0x00c7, 0xf79e, 0xfffb, 0xe73c, 0xad76, 0xa535, 0xad96, 0xef5d, 0x004b, 0xf79e, 0xffff, 0xdf1c, 0x0002, 0xce79, 0xffff, 0xd6ba, 0x006b, 0xf79e, 0xfffc, 0xf79b, 0x9ac8, 0x31c8, 0x54fb, 0x0002, 0xf79e, 0xfff4, 0xf6b3, 0x51c8, 0x31c8, 0x7dde, 0xf79e, 0xf5d0, 0x31c8, 0x31cc, 0x9ebb, 0x9ac8, 0x31c8, 0x54fb, 0x0005, 0xf79e, 0xfffc, 0xf79b, 0x9ac8, 0x31c8, 0x33f7, 0x0004, 0xf79e, 0xfffa, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0xf79e, 0xf5d0, 0x0007, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0006, 0xf79e, 0xfff2, 0xd5d3, 0x51c8, 0x31c8, 0x31d0, 0xbf9e, 0xf79e, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0xf6b3, 0x51c8, 0x31c8, 0x33f7, 0x0002, 0xf79e, 0xfffc, 0xf79b, 0x9ac8, 0x31c8, 0x33f7, 0x0005, 0xf79e, 0xfffc, 0xf6b3, 0x51c8, 0x31c8, 0x54fb, 0x0005, 0xf79e, 0xfffc, 0xd4ec, 0x31c8, 0x31cc, 0x9ebe, 0x00c7, 0xf79e, 0xfffb, 0xdedb, 0x6b6e, 0x52ec, 0x7bf0, 0xe73d, 0x00ba, 0xf79e, 0xfffc, 0xf79b, 0x9ac8, 0x31c8, 0x54fb, 0x0002, 0xf79e, 0xfff4, 0xf6b3, 0x51c8, 0x31c8, 0x7dde, 0xf79e, 0xf797, 0x79c8, 0x31c8, 0x54f3, 0x79c8, 0x31cc, 0x9ebe, 0x0006, 0xf79e, 0xfffc, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0x0002, 0xf79e, 0xfffc, 0xf79b, 0x9ac8, 0x31c8, 0x33f7, 0x0002, 0xf79e, 0xffff, 0xbbe8, 0x0008, 0x31c8, 0xffff, 0x7dde, 0x0007, 0xf79e, 0xffed, 0xbbe8, 0x31c8, 0x31cc, 0x9ebe, 0xf79e, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0xf79e, 0xd4ec, 0x31c8, 0x31cc, 0x9ebe, 0xf79e, 0xf79b, 0x9ac8, 0x31c8, 0x33f7, 0x0005, 0xf79e, 0xfffb, 0xf797, 0x79c8, 0x31c8, 0x32d3, 0xd79e, 0x0003, 0xf79e, 0xfffb, 0xf79b, 0x9ac8, 0x31c8, 0x32d3, 0xd79e, 0x00c7, 0xf79e, 0xfffb, 0xdedb, 0x6b6e, 0x52ec, 0x7bf0, 0xe73d, 0x00ba, 0xf79e, 0xfff6, 0xf79b, 0x9ac8, 0x31c8, 0x31cc, 0x9ebe, 0xf79b, 0xbbe8, 0x31c8, 0x31d0, 0xbf9e, 0x0002, 0xf79e, 0xffff, 0xd4ec, 0x0003, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0006, 0xf79e, 0xffff, 0xd4ec, 0x0002, 0x31c8, 0xfffc, 0x54f7, 0xd79e, 0xf79e, 0xd4ec, 0x0002, 0x31c8, 0xfffa, 0x54fb, 0xf79e, 0xf797, 0x79c8, 0x31c8, 0x7dde, 0x0003, 0xf79e, 0xfff8, 0xf797, 0x79c8, 0x31c8, 0x33f7, 0xf79e, 0xf6b3, 0x52d0, 0x9ddb, 0x0002, 0xf79e, 0xffec, 0xf6b3, 0x79c8, 0x31c8, 0x31d0, 0xbf9e, 0xf79e, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0xf79e, 0xf797, 0x79c8, 0x31c8, 0x33f7, 0xf79e, 0xf79b, 0x9ac8, 0x31c8, 0x33f7, 0x0006, 0xf79e, 0xffff, 0xd4ec, 0x0002, 0x31c8, 0xfffb, 0x53f7, 0xd79e, 0xf79e, 0xf79b, 0xbbec, 0x0002, 0x31c8, 0xffff, 0x7dde, 0x00c7, 0xf79e, 0xffff, 0xb5d7, 0x0005, 0x52ec, 0xfff5, 0x8c92, 0xef7d, 0xf79e, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xc639, 0x8c72, 0x6b8f, 0xdedb, 0x0002, 0xf79e, 0xfffa, 0xe71c, 0x8c72, 0x5b0c, 0x52ec, 0x73cf, 0xa555, 0x0002, 0x52ec, 0xfffe, 0x8c92, 0xef7d, 0x0002, 0xf79e, 0xffff, 0xce7a, 0x0002, 0x52ec, 0xfffa, 0x8c72, 0x9d14, 0x5b0d, 0x52ec, 0x6b6e, 0xbdf7, 0x0005, 0xf79e, 0xfffe, 0xbdf7, 0x6b6e, 0x0003, 0x52ec, 0xfffe, 0x636e, 0xad96, 0x0005, 0xf79e, 0xfffe, 0xad96, 0x636e, 0x0003, 0x52ec, 0xfffd, 0x5b0c, 0x8431, 0xd6ba, 0x0004, 0xf79e, 0xfffe, 0xc659, 0x73cf, 0x0004, 0x52ec, 0xfffe, 0x6b6e, 0xbdf7, 0x0004, 0xf79e, 0xffff, 0xb5d7, 0x0002, 0x52ec, 0xffff, 0xa514, 0x0002, 0xf79e, 0xffff, 0xb5d7, 0x0002, 0x52ec, 0xffff, 0xa514, 0x0002, 0xf79e, 0xfffb, 0xef5d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0x0002, 0xf79e, 0xfffd, 0xef5d, 0x9cf4, 0x5b0d, 0x0003, 0x52ec, 0xfffd, 0x5b0c, 0x8c72, 0xe71c, 0x0003, 0xf79e, 0xfff8, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xc639, 0x8c72, 0x6b8f, 0xdedb, 0x0048, 0xf79e, 0xfffe, 0xf79b, 0x9ac8, 0x0006, 0x31c8, 0xffff, 0x33f7, 0x0003, 0xf79e, 0xfffe, 0xf6b3, 0x51c8, 0x0002, 0x31c8, 0xffff, 0x54fb, 0x0007, 0xf79e, 0xfffe, 0xf79b, 0x9ac8, 0x0006, 0x31c8, 0xfff9, 0x32d3, 0xd79e, 0xf79e, 0xd4ec, 0x31c8, 0x31d0, 0xbf9e, 0x0004, 0xf79e, 0xfffa, 0xbbe8, 0x31c8, 0x31d0, 0xbf9e, 0xf6b3, 0x51c8, 0x0006, 0x31c8, 0xffff, 0x54fb, 0x0002, 0xf79e, 0xfffc, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0x0002, 0xf79e, 0xfffa, 0xbbe8, 0x31c8, 0x31cc, 0x9ebe, 0xf79b, 0x9ac8, 0x0006, 0x31c8, 0xfffc, 0x7dde, 0xf79e, 0xf79b, 0x9ac8, 0x0007, 0x31c8, 0xffff, 0x53f7, 0x00c8, 0xf79e, 0xffff, 0xb5d7, 0x0005, 0x52ec, 0xfff2, 0x8c92, 0xef7d, 0xf79e, 0xe73d, 0x7bf0, 0x52ec, 0x5b2d, 0x636e, 0x52ec, 0x6b6e, 0xdedb, 0xf79e, 0xef7d, 0x9cf4, 0x0007, 0x52ec, 0xfffe, 0x8c92, 0xef7d, 0x0002, 0xf79e, 0xffff, 0xce7a, 0x0007, 0x52ec, 0xfffe, 0x5b2d, 0xd69a, 0x0003, 0xf79e, 0xfffe, 0xc659, 0x5b0c, 0x0005, 0x52ec, 0xfffe, 0x5b0c, 0xc618, 0x0003, 0xf79e, 0xfffe, 0xc618, 0x5b0c, 0x0006, 0x52ec, 0xfffe, 0x8431, 0xef5d, 0x0002, 0xf79e, 0xfffe, 0xd6db, 0x636e, 0x0006, 0x52ec, 0xfffe, 0x5b0c, 0xc659, 0x0003, 0xf79e, 0xffff, 0xb5d7, 0x0002, 0x52ec, 0xffff, 0xa514, 0x0002, 0xf79e, 0xfff5, 0xd69a, 0x5b2d, 0x52ec, 0x8c92, 0xef7d, 0xf79e, 0xdefb, 0x6b8f, 0x52ec, 0x7bf0, 0xef5d, 0x0002, 0xf79e, 0xffff, 0x9d14, 0x0007, 0x52ec, 0xfffe, 0x8c72, 0xef5d, 0x0002, 0xf79e, 0xfff8, 0xe73d, 0x7bf0, 0x52ec, 0x5b2d, 0x636e, 0x52ec, 0x6b6e, 0xdedb, 0x0048, 0xf79e, 0xfffb, 0xf79b, 0x9ac8, 0x31cc, 0x9eb7, 0x9acc, 0x0002, 0x31c8, 0xfffe, 0x53f7, 0xd79e, 0x0003, 0xf79e, 0xfffb, 0xf79b, 0x9ac8, 0x31c8, 0x31cc, 0x9ebe, 0x0008, 0xf79e, 0xfffd, 0xf79b, 0xbbec, 0x51c8, 0x0002, 0x31c8, 0xfffd, 0x32cc, 0x7cf7, 0xd79e, 0x0002, 0xf79e, 0xfffd, 0xbbe8, 0x31c8, 0x33f7, 0x0005, 0xf79e, 0xffff, 0xf5d0, 0x0002, 0x31c8, 0xfffc, 0x7dde, 0xf79e, 0xf6b7, 0x7acc, 0x0003, 0x31c8, 0xfffe, 0x52d0, 0xbebb, 0x0003, 0xf79e, 0xfffc, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0x0002, 0xf79e, 0xfffa, 0xf6b3, 0x51c8, 0x31c8, 0x54fb, 0xf79e, 0xbbe8, 0x0006, 0x31c8, 0xffff, 0x7dde, 0x0002, 0xf79e, 0xfffd, 0xf79b, 0xbcf0, 0x52c8, 0x0003, 0x31c8, 0xfffe, 0x52d0, 0x9ddb, 0x00c9, 0xf79e, 0xfff9, 0xdf1c, 0xb5d7, 0x634e, 0x52ec, 0x6b8f, 0xc618, 0xd6ba, 0x0002, 0xf79e, 0xfffe, 0xe73d, 0x7bf0, 0x0002, 0x52ec, 0xfff4, 0x73cf, 0xbdf8, 0xce79, 0xef5d, 0xf79e, 0xe73d, 0x7bf0, 0x52ec, 0x5b0c, 0xad75, 0xc659, 0x94d3, 0x0002, 0x52ec, 0xfffe, 0x8c92, 0xef7d, 0x0002, 0xf79e, 0xffff, 0xce7a, 0x0002, 0x52ec, 0xfffc, 0x636e, 0xbdd7, 0xc659, 0x8472, 0x0002, 0x52ec, 0xffff, 0xb5d7, 0x0003, 0xf79e, 0xffff, 0xa535, 0x0002, 0x52ec, 0xfffd, 0x94d3, 0xce79, 0x9cf4, 0x0002, 0x52ec, 0xffff, 0xa514, 0x0003, 0xf79e, 0xffff, 0xa514, 0x0002, 0x52ec, 0xfff9, 0x94b3, 0xc659, 0xbdf8, 0x6b6e, 0x52ec, 0x6b6e, 0xdedb, 0x0002, 0xf79e, 0xffff, 0xc618, 0x0002, 0x52ec, 0xfffc, 0x8472, 0xc659, 0xce79, 0x94d3, 0x0002, 0x52ec, 0xffff, 0xad75, 0x0003, 0xf79e, 0xffff, 0xb5d7, 0x0002, 0x52ec, 0xffff, 0xa514, 0x0002, 0xf79e, 0xffe9, 0xdf1c, 0x73af, 0x52ec, 0x7bf0, 0xe73d, 0xf79e, 0xce7a, 0x5b0c, 0x52ec, 0x94d3, 0xef7d, 0xf79e, 0xef5d, 0x8431, 0x52ec, 0x5b2d, 0xb5b7, 0xce79, 0xbdf8, 0x6b6e, 0x52ec, 0x73af, 0xdf1c, 0x0002, 0xf79e, 0xfffe, 0xe73d, 0x7bf0, 0x0002, 0x52ec, 0xfffc, 0x73cf, 0xbdf8, 0xce79, 0xef5d, 0x0055, 0xf79e, 0xfffc, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0x0110, 0xf79e, 0xfffb, 0xdedb, 0x6b6e, 0x52ec, 0x7bf0, 0xe73d, 0x0003, 0xf79e, 0xfffe, 0xe73d, 0x7bf0, 0x0002, 0x52ec, 0xffff, 0xc639, 0x0004, 0xf79e, 0xfff9, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0xf79e, 0xce7a, 0x0002, 0x52ec, 0xfffe, 0x8c92, 0xef7d, 0x0002, 0xf79e, 0xffff, 0xce7a, 0x0002, 0x52ec, 0xfffc, 0x8c92, 0xef7d, 0xf79e, 0xa514, 0x0002, 0x52ec, 0xffff, 0xb5d7, 0x0003, 0xf79e, 0xffff, 0xa514, 0x0002, 0x52ec, 0xfffd, 0xb5d7, 0xf79e, 0xce7a, 0x0002, 0x52ec, 0xffff, 0xa514, 0x0003, 0xf79e, 0xffff, 0xa514, 0x0002, 0x52ec, 0xfff9, 0xb5d7, 0xf79e, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0x0002, 0xf79e, 0xffff, 0xb5d7, 0x0002, 0x52ec, 0xffff, 0xa514, 0x0002, 0xf79e, 0xffff, 0xb5d7, 0x0002, 0x52ec, 0xffff, 0xa514, 0x0003, 0xf79e, 0xffff, 0xb5d7, 0x0002, 0x52ec, 0xffff, 0xa514, 0x0002, 0xf79e, 0xfff9, 0xef5d, 0x8472, 0x52ec, 0x6b8f, 0xdefb, 0xf79e, 0xc618, 0x0002, 0x52ec, 0xffff, 0xad96, 0x0002, 0xf79e, 0xfff5, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0xf79e, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0x0002, 0xf79e, 0xfffe, 0xe73d, 0x7bf0, 0x0002, 0x52ec, 0xffff, 0xc639, 0x0057, 0xf79e, 0xfffc, 0xf6b3, 0x51c8, 0x31c8, 0x54fb, 0x0111, 0xf79e, 0xfffb, 0xdedb, 0x6b6e, 0x52ec, 0x7bf0, 0xe73d, 0x0003, 0xf79e, 0xfffb, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0x0004, 0xf79e, 0xfff9, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0xf79e, 0xce7a, 0x0002, 0x52ec, 0xfffe, 0x8c92, 0xef7d, 0x0002, 0xf79e, 0xffff, 0xce7a, 0x0002, 0x52ec, 0xfffc, 0x8c92, 0xef7d, 0xf79e, 0xa514, 0x0002, 0x52ec, 0xffff, 0xb5d7, 0x0003, 0xf79e, 0xffff, 0xa514, 0x0002, 0x52ec, 0xfffd, 0xb5d7, 0xf79e, 0xef7d, 0x0002, 0xe73d, 0xffff, 0xef5d, 0x0003, 0xf79e, 0xffff, 0xa514, 0x0002, 0x52ec, 0xfff9, 0xb5d7, 0xf79e, 0xef5d, 0xad96, 0xa535, 0xad76, 0xe73c, 0x0002, 0xf79e, 0xffff, 0xb5d7, 0x0002, 0x52ec, 0xffff, 0xa514, 0x0002, 0xf79e, 0xffff, 0xb5d7, 0x0002, 0x52ec, 0xffff, 0xa514, 0x0003, 0xf79e, 0xffff, 0xb5d7, 0x0002, 0x52ec, 0xffff, 0xa514, 0x0003, 0xf79e, 0xfffa, 0x9d14, 0x52ec, 0x5b0c, 0xce7a, 0xf79e, 0xad75, 0x0002, 0x52ec, 0xffff, 0xce79, 0x0002, 0xf79e, 0xfff5, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0xf79e, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0x0002, 0xf79e, 0xfffb, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0x0057, 0xf79e, 0xfffc, 0xd4ec, 0x31c8, 0x31d0, 0xbf9e, 0x0111, 0xf79e, 0xfffb, 0xdedb, 0x6b6e, 0x52ec, 0x7bf0, 0xe73d, 0x0003, 0xf79e, 0xfffb, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0x0004, 0xf79e, 0xfff9, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0xf79e, 0xce7a, 0x0002, 0x52ec, 0xfffe, 0x8c92, 0xef7d, 0x0002, 0xf79e, 0xffff, 0xce7a, 0x0002, 0x52ec, 0xfffc, 0x8c92, 0xef7d, 0xf79e, 0xa514, 0x0002, 0x52ec, 0xffff, 0xb5d7, 0x0003, 0xf79e, 0xffff, 0xa514, 0x0002, 0x52ec, 0xffff, 0xb5d7, 0x0008, 0xf79e, 0xffff, 0xa514, 0x0002, 0x52ec, 0xffff, 0xb5d7, 0x0008, 0xf79e, 0xffff, 0xb5d7, 0x0002, 0x52ec, 0xffff, 0x8c92, 0x0002, 0xce79, 0xffff, 0x9d14, 0x0002, 0x52ec, 0xffff, 0xa514, 0x0003, 0xf79e, 0xffff, 0xb5d7, 0x0002, 0x52ec, 0xffff, 0xa514, 0x0003, 0xf79e, 0xffff, 0xbdf7, 0x0002, 0x52ec, 0xfffa, 0xbdf7, 0xef7d, 0x94d3, 0x52ec, 0x6b8f, 0xdefb, 0x0002, 0xf79e, 0xfff5, 0xe73d, 0x7bf0, 0x52ec, 0x634e, 0xb5d7, 0xce79, 0xc618, 0x6b8f, 0x52ec, 0x6b6e, 0xdedb, 0x0002, 0xf79e, 0xfffb, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0x016c, 0xf79e, 0xfffb, 0xdedb, 0x6b6e, 0x52ec, 0x7bf0, 0xe73d, 0x0003, 0xf79e, 0xfffb, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0x0004, 0xf79e, 0xfff9, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0xf79e, 0xce7a, 0x0002, 0x52ec, 0xfffe, 0x8c92, 0xef7d, 0x0002, 0xf79e, 0xffff, 0xce7a, 0x0002, 0x52ec, 0xfffc, 0x8c92, 0xef7d, 0xf79e, 0xa514, 0x0002, 0x52ec, 0xffff, 0xb5d7, 0x0003, 0xf79e, 0xffff, 0xb5d7, 0x0005, 0x52ec, 0xfffd, 0x634d, 0x9d14, 0xef5d, 0x0003, 0xf79e, 0xffff, 0xa514, 0x0002, 0x52ec, 0xffff, 0xb5d7, 0x0008, 0xf79e, 0xffff, 0xb5d7, 0x0008, 0x52ec, 0xffff, 0xa514, 0x0003, 0xf79e, 0xffff, 0xb5d7, 0x0002, 0x52ec, 0xffff, 0xa514, 0x0003, 0xf79e, 0xfff7, 0xd69a, 0x5b2d, 0x52ec, 0xa535, 0xef5d, 0x8431, 0x52ec, 0x7bf0, 0xef5d, 0x0002, 0xf79e, 0xfffe, 0xe73d, 0x7bf0, 0x0007, 0x52ec, 0xfffe, 0x6b6e, 0xdedb, 0x0002, 0xf79e, 0xfffb, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0x016c, 0xf79e, 0xfffb, 0xdedb, 0x6b6e, 0x52ec, 0x7bf0, 0xe73d, 0x0003, 0xf79e, 0xfffb, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0x0004, 0xf79e, 0xfff9, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0xf79e, 0xce7a, 0x0002, 0x52ec, 0xfffe, 0x8c92, 0xef7d, 0x0002, 0xf79e, 0xffff, 0xce7a, 0x0002, 0x52ec, 0xfffc, 0x8c92, 0xef7d, 0xf79e, 0xa514, 0x0002, 0x52ec, 0xffff, 0xb5d7, 0x0003, 0xf79e, 0xfffe, 0xe73c, 0x7c10, 0x0006, 0x52ec, 0xffff, 0xad76, 0x0003, 0xf79e, 0xffff, 0xa514, 0x0002, 0x52ec, 0xffff, 0xb5d7, 0x0008, 0xf79e, 0xffff, 0xb5d7, 0x0008, 0x52ec, 0xffff, 0xa514, 0x0003, 0xf79e, 0xffff, 0xb5d7, 0x0002, 0x52ec, 0xffff, 0xa514, 0x0003, 0xf79e, 0xfff7, 0xe71c, 0x73cf, 0x52ec, 0x94b3, 0xdedb, 0x73af, 0x52ec, 0x94d3, 0xef7d, 0x0002, 0xf79e, 0xfffe, 0xe73d, 0x7bf0, 0x0007, 0x52ec, 0xfffe, 0x6b6e, 0xdedb, 0x0002, 0xf79e, 0xfffb, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0x016c, 0xf79e, 0xfffb, 0xdedb, 0x6b6e, 0x52ec, 0x7bf0, 0xe73d, 0x0003, 0xf79e, 0xfffb, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0x0004, 0xf79e, 0xfff9, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0xf79e, 0xce7a, 0x0002, 0x52ec, 0xfffe, 0x8c92, 0xef7d, 0x0002, 0xf79e, 0xffff, 0xce7a, 0x0002, 0x52ec, 0xfffc, 0x8c92, 0xef7d, 0xf79e, 0xa514, 0x0002, 0x52ec, 0xffff, 0xb5d7, 0x0004, 0xf79e, 0xfffe, 0xef7d, 0xd6ba, 0x0002, 0xce79, 0xffff, 0xa555, 0x0002, 0x52ec, 0xfffe, 0x94b3, 0xef7d, 0x0002, 0xf79e, 0xffff, 0xa514, 0x0002, 0x52ec, 0xffff, 0xb5d7, 0x0008, 0xf79e, 0xffff, 0xb5d7, 0x0002, 0x52ec, 0xffff, 0xa514, 0x0009, 0xf79e, 0xffff, 0xb5d7, 0x0002, 0x52ec, 0xffff, 0xa514, 0x0003, 0xf79e, 0xfff8, 0xef7d, 0x8c92, 0x52ec, 0x7bf0, 0xc639, 0x5b2d, 0x52ec, 0xad96, 0x0003, 0xf79e, 0xfffb, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0x0008, 0xf79e, 0xfffb, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0x016c, 0xf79e, 0xfffb, 0xdedb, 0x6b6e, 0x52ec, 0x7bf0, 0xe73d, 0x0003, 0xf79e, 0xfffb, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0x0004, 0xf79e, 0xfff9, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0xf79e, 0xce7a, 0x0002, 0x52ec, 0xfffe, 0x8c92, 0xef7d, 0x0002, 0xf79e, 0xffff, 0xce7a, 0x0002, 0x52ec, 0xfffc, 0x8c92, 0xef7d, 0xf79e, 0xa514, 0x0002, 0x52ec, 0xffff, 0xb5d7, 0x0008, 0xf79e, 0xffff, 0xce7a, 0x0002, 0x52ec, 0xfffe, 0x8c92, 0xef7d, 0x0002, 0xf79e, 0xffff, 0xa514, 0x0002, 0x52ec, 0xfff9, 0xb5d7, 0xf79e, 0xef5d, 0x8c92, 0x7bf0, 0x8431, 0xdefb, 0x0002, 0xf79e, 0xffff, 0xb5d7, 0x0002, 0x52ec, 0xffff, 0xa514, 0x0002, 0xf79e, 0xffff, 0xef7d, 0x0002, 0xe73d, 0xffff, 0xef7d, 0x0003, 0xf79e, 0xffff, 0xb5d7, 0x0002, 0x52ec, 0xffff, 0xa514, 0x0004, 0xf79e, 0xfffc, 0x9d14, 0x52ec, 0x73af, 0xad96, 0x0002, 0x52ec, 0xffff, 0xce79, 0x0003, 0xf79e, 0xfffb, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0x0002, 0xf79e, 0xfffd, 0xef5d, 0xe73d, 0xef5d, 0x0003, 0xf79e, 0xfffb, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0x016c, 0xf79e, 0xfffb, 0xdedb, 0x6b6e, 0x52ec, 0x7bf0, 0xe73d, 0x0003, 0xf79e, 0xfffb, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0x0004, 0xf79e, 0xfff9, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0xf79e, 0xce7a, 0x0002, 0x52ec, 0xfffe, 0x8c92, 0xef7d, 0x0002, 0xf79e, 0xffff, 0xce7a, 0x0002, 0x52ec, 0xfffc, 0x8c92, 0xef7d, 0xf79e, 0xa514, 0x0002, 0x52ec, 0xffff, 0xb5d7, 0x0003, 0xf79e, 0xffff, 0xb5d7, 0x0002, 0x52ec, 0xfffd, 0xb5d7, 0xf79e, 0xce7a, 0x0002, 0x52ec, 0xfffe, 0x8c92, 0xef7d, 0x0002, 0xf79e, 0xffff, 0xa514, 0x0002, 0x52ec, 0xfff9, 0xb5d7, 0xf79e, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0x0002, 0xf79e, 0xffff, 0xb5d7, 0x0002, 0x52ec, 0xffff, 0xa514, 0x0002, 0xf79e, 0xffff, 0xb5d7, 0x0002, 0x52ec, 0xffff, 0xb5d7, 0x0003, 0xf79e, 0xffff, 0xb5d7, 0x0002, 0x52ec, 0xffff, 0xa514, 0x0004, 0xf79e, 0xfff9, 0xbdf7, 0x52ec, 0x5b2d, 0x8431, 0x52ec, 0x6b8f, 0xdefb, 0x0003, 0xf79e, 0xfff5, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0xf79e, 0xe73d, 0x7bf0, 0x52ec, 0x7bf0, 0xe73d, 0x0002, 0xf79e, 0xfffb, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0x016c, 0xf79e, 0xfff3, 0xdedb, 0x6b6e, 0x52ec, 0x634d, 0x9cf4, 0xbdd7, 0xef7d, 0xf79e, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0x0004, 0xf79e, 0xfff9, 0xe73d, 0x7bf0, 0x52ec, 0x5b0c, 0xad75, 0xc659, 0x94d3, 0x0002, 0x52ec, 0xfffe, 0x8c92, 0xef7d, 0x0002, 0xf79e, 0xffff, 0xce7a, 0x0002, 0x52ec, 0xfffc, 0x8c92, 0xef7d, 0xf79e, 0xa514, 0x0002, 0x52ec, 0xffff, 0xb5d7, 0x0003, 0xf79e, 0xffff, 0xb5d7, 0x0002, 0x52ec, 0xfffd, 0x9cf4, 0xdefb, 0xad76, 0x0002, 0x52ec, 0xfffe, 0x94b3, 0xef7d, 0x0002, 0xf79e, 0xffff, 0xa514, 0x0002, 0x52ec, 0xfff9, 0x7c31, 0xa535, 0x9d14, 0x636e, 0x52ec, 0x6b6e, 0xdedb, 0x0002, 0xf79e, 0xffff, 0xc618, 0x0002, 0x52ec, 0xffff, 0x8472, 0x0002, 0xc659, 0xffff, 0x94b3, 0x0002, 0x52ec, 0xffff, 0xb5d7, 0x0003, 0xf79e, 0xffff, 0xb5d7, 0x0002, 0x52ec, 0xffff, 0xa514, 0x0004, 0xf79e, 0xfffe, 0xd69a, 0x5b2d, 0x0003, 0x52ec, 0xfffe, 0x8431, 0xef5d, 0x0003, 0xf79e, 0xfff5, 0xef5d, 0x8431, 0x52ec, 0x5b2d, 0xb5b7, 0xce79, 0xbdd7, 0x636e, 0x52ec, 0x7bf0, 0xe73d, 0x0002, 0xf79e, 0xfffb, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0x016c, 0xf79e, 0xfffe, 0xef5d, 0x8451, 0x0003, 0x52ec, 0xfff8, 0x8c92, 0xef7d, 0xf79e, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0x0004, 0xf79e, 0xfffe, 0xef7d, 0x9cf4, 0x0007, 0x52ec, 0xfffe, 0x8c92, 0xef7d, 0x0002, 0xf79e, 0xffff, 0xce7a, 0x0002, 0x52ec, 0xfffc, 0x8c92, 0xef7d, 0xf79e, 0xa514, 0x0002, 0x52ec, 0xffff, 0xb5d7, 0x0003, 0xf79e, 0xfffe, 0xc659, 0x5b0c, 0x0006, 0x52ec, 0xffff, 0xb5b7, 0x0003, 0xf79e, 0xfffe, 0xc618, 0x5b0c, 0x0006, 0x52ec, 0xfffe, 0x8431, 0xef5d, 0x0002, 0xf79e, 0xfffe, 0xd6db, 0x636e, 0x0006, 0x52ec, 0xfffe, 0x5b0c, 0xc659, 0x0003, 0xf79e, 0xffff, 0xb5d7, 0x0002, 0x52ec, 0xffff, 0xa514, 0x0004, 0xf79e, 0xfffe, 0xe71c, 0x73cf, 0x0003, 0x52ec, 0xffff, 0x9cf4, 0x0005, 0xf79e, 0xffff, 0x9d14, 0x0007, 0x52ec, 0xfffe, 0x8c72, 0xef5d, 0x0002, 0xf79e, 0xfffb, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0x0051, 0xf79e, 0xfffd, 0xf79b, 0xbbec, 0x51c8, 0x0002, 0x31c8, 0xfffe, 0x32cc, 0x7ddb, 0x0115, 0xf79e, 0xfff4, 0xdefb, 0x8431, 0x5b0c, 0x52ec, 0x8c92, 0xef7d, 0xf79e, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0x0005, 0xf79e, 0xfffa, 0xe71c, 0x8c72, 0x5b0c, 0x52ec, 0x73cf, 0xa555, 0x0002, 0x52ec, 0xfffe, 0x8c92, 0xef7d, 0x0002, 0xf79e, 0xffff, 0xce7a, 0x0002, 0x52ec, 0xfffc, 0x8c92, 0xef7d, 0xf79e, 0xa514, 0x0002, 0x52ec, 0xffff, 0xb5d7, 0x0004, 0xf79e, 0xfffe, 0xbdf7, 0x6b6e, 0x0003, 0x52ec, 0xfffd, 0x634d, 0x9d14, 0xef5d, 0x0004, 0xf79e, 0xfffe, 0xad96, 0x636e, 0x0003, 0x52ec, 0xfffd, 0x5b0c, 0x8431, 0xd6ba, 0x0004, 0xf79e, 0xfffe, 0xc659, 0x73cf, 0x0004, 0x52ec, 0xfffe, 0x6b8f, 0xbdf7, 0x0004, 0xf79e, 0xffff, 0xb5d7, 0x0002, 0x52ec, 0xffff, 0xa514, 0x0004, 0xf79e, 0xfffe, 0xef7d, 0x8c92, 0x0003, 0x52ec, 0xffff, 0xad96, 0x0005, 0xf79e, 0xfffd, 0xef5d, 0x9cf4, 0x5b0d, 0x0003, 0x52ec, 0xfffd, 0x5b0d, 0x8c92, 0xe71c, 0x0003, 0xf79e, 0xfffb, 0xe73d, 0x7bf0, 0x52ec, 0x6b6e, 0xdedb, 0x0051, 0xf79e, 0xffff, 0xbbe8, 0x0006, 0x31c8, 0xffff, 0x7dde, 0x000c, 0xf79e, 0xffff, 0xbbe8, 0x0005, 0x31c8, 0xfffe, 0x32d0, 0x9ddb, 0x0002, 0xf79e, 0xfffe, 0xf6b3, 0x51c8, 0x0006, 0x31c8, 0xfffa, 0x31cc, 0x9ebe, 0xf79b, 0x9ac8, 0x31c8, 0x33f7, 0x0002, 0xf79e, 0xfffa, 0xf6b3, 0x51c8, 0x31c8, 0x54fb, 0xf79e, 0xd4ec, 0x0005, 0x31c8, 0xfffe, 0x52d0, 0xbebe, 0x0003, 0xf79e, 0xfffd, 0xbbe8, 0x31c8, 0x33f7, 0x019e, 0xf79e, 0xfff7, 0xf6b3, 0x51c8, 0x31c8, 0x54fb, 0xf79e, 0xf6b3, 0x79c8, 0x31c8, 0x54fb, 0x000c, 0xf79e, 0xffff, 0xbbe8, 0x0007, 0x31c8, 0xfffc, 0x7dde, 0xf79e, 0xf6b3, 0x51c8, 0x0006, 0x31c8, 0xfff2, 0x31cc, 0x9ebe, 0xf79b, 0x9ac8, 0x31c8, 0x33f7, 0xf79e, 0xf79b, 0x9ac8, 0x31c8, 0x31d0, 0xbf9e, 0xf79e, 0xbbe8, 0x0006, 0x31c8, 0xfffe, 0x31cc, 0x9ebe, 0x0002, 0xf79e, 0xfffd, 0xbbe8, 0x31c8, 0x33f7, 0x019e, 0xf79e, 0xfff7, 0xf6b3, 0x51c8, 0x31c8, 0x7dde, 0xf79e, 0xf797, 0x79c8, 0x31c8, 0x54fb, 0x000c, 0xf79e, 0xfff6, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0xf79e, 0xf6b7, 0x79c8, 0x31c8, 0x32d3, 0xd79e, 0x0006, 0xf79e, 0xfff3, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0xf79b, 0x9ac8, 0x31c8, 0x33f7, 0xf79e, 0xd4ec, 0x31c8, 0x31cc, 0x9ebe, 0x0002, 0xf79e, 0xfffa, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0xf79e, 0xd5d0, 0x0002, 0x31c8, 0xffff, 0x54fb, 0x0002, 0xf79e, 0xfffd, 0xbbe8, 0x31c8, 0x33f7, 0x019e, 0xf79e, 0xfff7, 0xf79b, 0x9ac8, 0x31c8, 0x32d3, 0xd6b7, 0x7ac8, 0x31c8, 0x32d0, 0xbf9e, 0x000c, 0xf79e, 0xfffc, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0x0002, 0xf79e, 0xfffc, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0x0005, 0xf79e, 0xfff3, 0xf6b3, 0x51c8, 0x31c8, 0x7dde, 0xf79e, 0xf79b, 0x9ac8, 0x31c8, 0x33f7, 0xf797, 0x79c8, 0x31c8, 0x54fb, 0x0003, 0xf79e, 0xfff7, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0xf79e, 0xf797, 0x79c8, 0x31c8, 0x54fb, 0x0002, 0xf79e, 0xfffd, 0xbbe8, 0x31c8, 0x33f7, 0x019f, 0xf79e, 0xfffe, 0xf6b3, 0x51c8, 0x0003, 0x31c8, 0xfffe, 0x53f3, 0xd79e, 0x000d, 0xf79e, 0xfff7, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0xf79e, 0xf6b7, 0x79c8, 0x31c8, 0x33f7, 0x0006, 0xf79e, 0xfff4, 0xbbe8, 0x31c8, 0x31d0, 0xbf9e, 0xf79e, 0xf79b, 0x9ac8, 0x31c8, 0x33f7, 0xbbe8, 0x31c8, 0x33f7, 0x0004, 0xf79e, 0xfff7, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0xf79e, 0xd5d0, 0x31c8, 0x31cc, 0x9ebe, 0x0002, 0xf79e, 0xfffd, 0xbbe8, 0x31c8, 0x33f7, 0x019e, 0xf79e, 0xfffe, 0xf79b, 0xbbec, 0x0003, 0x31c8, 0xfff9, 0x33f7, 0xd79e, 0xf79e, 0xd4ec, 0x31c8, 0x33f7, 0xd79e, 0x0009, 0xf79e, 0xffff, 0xbbe8, 0x0006, 0x31c8, 0xfffe, 0x32d3, 0xd79e, 0x0005, 0xf79e, 0xfffc, 0xf6b3, 0x51c8, 0x31c8, 0x54fb, 0x0002, 0xf79e, 0xfffe, 0xf79b, 0x9ac8, 0x0003, 0x31c8, 0xfffe, 0x31cc, 0x9ebe, 0x0004, 0xf79e, 0xffff, 0xbbe8, 0x0005, 0x31c8, 0xfffe, 0x31cc, 0x7ddb, 0x0003, 0xf79e, 0xfffd, 0xbbe8, 0x31c8, 0x33f7, 0x019e, 0xf79e, 0xfffc, 0xbbe8, 0x31c8, 0x31cc, 0x7bec, 0x0002, 0x31c8, 0xfffb, 0x53f7, 0xf79e, 0xd4ec, 0x31c8, 0x33f7, 0x000a, 0xf79e, 0xffff, 0xbbe8, 0x0005, 0x31c8, 0xfffe, 0x32d3, 0xbf9e, 0x0006, 0xf79e, 0xfffc, 0xbbe8, 0x31c8, 0x31d0, 0xbf9e, 0x0002, 0xf79e, 0xfff9, 0xf79b, 0x9ac8, 0x31c8, 0x33f0, 0x79c8, 0x31c8, 0x33f7, 0x0004, 0xf79e, 0xffff, 0xbbe8, 0x0007, 0x31c8, 0xffff, 0x54fb, 0x0002, 0xf79e, 0xfffd, 0xbbe8, 0x31c8, 0x33f7, 0x019d, 0xf79e, 0xfffa, 0xf6b3, 0x51c8, 0x31c8, 0x7dde, 0xf79e, 0xbbec, 0x0002, 0x31c8, 0xfffc, 0x53f3, 0x9ac8, 0x31c8, 0x54fb, 0x000a, 0xf79e, 0xfff8, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0xf6b3, 0x51c8, 0x31c8, 0x33f7, 0x0005, 0xf79e, 0xfffc, 0xf6b3, 0x51c8, 0x31c8, 0x33f7, 0x0003, 0xf79e, 0xfff8, 0xf79b, 0x9ac8, 0x31c8, 0x33f7, 0xf5d0, 0x31c8, 0x31cc, 0x9ebe, 0x0003, 0xf79e, 0xfff2, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0xf79e, 0xf79b, 0xbbe8, 0x31c8, 0x31d0, 0xbf9e, 0xf79e, 0xbbe8, 0x31c8, 0x33f7, 0x019d, 0xf79e, 0xfffc, 0xf5d0, 0x31c8, 0x31cc, 0x9ebe, 0x0002, 0xf79e, 0xffff, 0xbbec, 0x0003, 0x31c8, 0xfffe, 0x31cc, 0x9ebe, 0x000a, 0xf79e, 0xfff7, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0xf79e, 0xd4ec, 0x31c8, 0x31cc, 0x9ebe, 0x0004, 0xf79e, 0xfffc, 0xd4ec, 0x31c8, 0x31cc, 0x9ebe, 0x0003, 0xf79e, 0xfff7, 0xf79b, 0x9ac8, 0x31c8, 0x33f7, 0xf79b, 0x9ac8, 0x31c8, 0x32d3, 0xd79e, 0x0002, 0xf79e, 0xfffc, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0x0002, 0xf79e, 0xfff8, 0xf6b3, 0x51c8, 0x31cc, 0x9ebe, 0xf79e, 0xbbe8, 0x31c8, 0x33f7, 0x019d, 0xf79e, 0xfff8, 0xf6b3, 0x51c8, 0x31c8, 0x33f7, 0xd79e, 0xf79e, 0xf6bb, 0x9ac8, 0x0002, 0x31c8, 0xfffe, 0x31cc, 0x9ddb, 0x000a, 0xf79e, 0xfff7, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0xf79e, 0xf797, 0x79c8, 0x31c8, 0x33f7, 0x0003, 0xf79e, 0xfffc, 0xf797, 0x79c8, 0x31c8, 0x33f7, 0x0004, 0xf79e, 0xfff7, 0xf79b, 0x9ac8, 0x31c8, 0x33f7, 0xf79e, 0xf6b3, 0x51c8, 0x31c8, 0x54fb, 0x0002, 0xf79e, 0xfff2, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0xf79e, 0xf79b, 0xbbe8, 0x31c8, 0x31d0, 0xbf9e, 0xf79e, 0xbbe8, 0x31c8, 0x33f7, 0x019e, 0xf79e, 0xffff, 0xbbe8, 0x000a, 0x31c8, 0xffff, 0x33f7, 0x0009, 0xf79e, 0xfffc, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0x0002, 0xf79e, 0xfffc, 0xbbe8, 0x31c8, 0x31cc, 0x9ebe, 0x0002, 0xf79e, 0xffff, 0xd4ec, 0x0002, 0x31c8, 0xffff, 0x7dde, 0x0004, 0xf79e, 0xfffc, 0xf79b, 0x9ac8, 0x31c8, 0x33f7, 0x0002, 0xf79e, 0xfffa, 0xbbe8, 0x31c8, 0x31cc, 0x9ebe, 0xf79e, 0xbbe8, 0x0007, 0x31c8, 0xffff, 0x54fb, 0x0002, 0xf79e, 0xfffd, 0xbbe8, 0x31c8, 0x33f7, 0x019f, 0xf79e, 0xfffe, 0xd5d0, 0x52c8, 0x0002, 0x31c8, 0xfff9, 0x31cc, 0x53f3, 0xbebe, 0xf79b, 0xbbec, 0x31c8, 0x33f7, 0x0009, 0xf79e, 0xfffc, 0xbbe8, 0x31c8, 0x32d3, 0xd79e, 0x0002, 0xf79e, 0xfff6, 0xf6b3, 0x51c8, 0x31c8, 0x54fb, 0xf79e, 0xf797, 0x79c8, 0x31c8, 0x32d3, 0xd79e, 0x0004, 0xf79e, 0xfffc, 0xf79b, 0x9ac8, 0x31c8, 0x33f7, 0x0002, 0xf79e, 0xfffa, 0xf797, 0x79c8, 0x31c8, 0x33f7, 0xf79e, 0xd4ec, 0x0005, 0x31c8, 0xfffe, 0x52d0, 0x9ddb, 0x0003, 0xf79e, 0xfffd, 0xbbe8, 0x31c8, 0x33f7, 0x41c7, 0xf79e}, -}; - -#endif diff --git a/Src/lcd.c b/Src/lcd.c deleted file mode 100644 index cc2f894..0000000 --- a/Src/lcd.c +++ /dev/null @@ -1,824 +0,0 @@ -#include "main.h" -#include "lcd.h" -#include "functions.h" -#include "arm_math.h" -#include "agc.h" -#include "settings.h" -#include "system_menu.h" -#include "wm8731.h" -#include "audio_filters.h" -#include "fonts.h" -#include "wm8731.h" -#include "usbd_ua3reo.h" -#include "front_unit.h" -#include "screen_layout.h" -#include "images.h" -#include "fft.h" - -volatile bool LCD_busy = false; -volatile bool LCD_inited = false; -volatile DEF_LCD_UpdateQuery LCD_UpdateQuery = {false}; -volatile bool LCD_systemMenuOpened = false; -uint16_t LCD_bw_trapez_stripe_pos = 0; -STRUCT_COLOR_THEME* COLOR = &COLOR_THEMES[0]; - -static char LCD_freq_string_hz[6] = {0}; -static char LCD_freq_string_khz[6] = {0}; -static char LCD_freq_string_mhz[6] = {0}; -static uint32_t LCD_last_showed_freq = 0; -static uint16_t LCD_last_showed_freq_mhz = 9999; -static uint16_t LCD_last_showed_freq_khz = 9999; -static uint16_t LCD_last_showed_freq_hz = 9999; - -static float32_t LCD_last_s_meter = 1.0f; -static uint32_t Time; -static uint8_t Hours; -static uint8_t Last_showed_Hours = 255; -static uint8_t Minutes; -static uint8_t Last_showed_Minutes = 255; -static uint8_t Seconds; -static uint8_t Last_showed_Seconds = 255; - -static uint32_t Tooltip_DiplayStartTime = 0; -static bool Tooltip_first_draw = true; -static char Tooltip_string[64] = {0}; - -static void printInfoSmall(uint16_t x, uint16_t y, uint16_t width, uint16_t height, char *text, uint16_t back_color, uint16_t text_color, uint16_t in_active_color, bool active); -static void printInfo(uint16_t x, uint16_t y, uint16_t width, uint16_t height, char *text, uint16_t back_color, uint16_t text_color, uint16_t in_active_color, bool active); -static void LCD_displayFreqInfo(bool redraw); -static void LCD_displayTopButtons(bool redraw); -static void LCD_displayStatusInfoBar(bool redraw); -static void LCD_displayStatusInfoGUI(bool redraw); -static void LCD_displayTextBar(void); -static void LCD_printTooltip(void); - -void LCD_Init(void) -{ - COLOR = &COLOR_THEMES[TRX.ColorThemeId]; - - LCDDriver_Init(); - LCDDriver_setRotation(4); - LCDDriver_Fill(BG_COLOR); - LCD_inited = true; -} - -static void LCD_displayTopButtons(bool redraw) -{ // display the top buttons - if (LCD_systemMenuOpened) - return; - if (LCD_busy) - { - LCD_UpdateQuery.TopButtons = true; - return; - } - LCD_busy = true; - if (redraw) - LCDDriver_Fill_RectWH(LAY_TOPBUTTONS_X1, LAY_TOPBUTTONS_Y1, LAY_TOPBUTTONS_X2, LAY_TOPBUTTONS_Y2, BG_COLOR); - - // display information about the operation of the transceiver - printInfo(LAY_TOPBUTTONS_PRE_X, LAY_TOPBUTTONS_PRE_Y, LAY_TOPBUTTONS_WIDTH, LAY_TOPBUTTONS_HEIGHT, "PRE", COLOR->BUTTON_BACKGROUND, COLOR->BUTTON_TEXT, COLOR->BUTTON_INACTIVE_TEXT, TRX.ADC_Driver); - char buff[64] = {0}; - sprintf(buff, "ATT%d", (uint8_t)TRX.ATT_DB); - if (TRX.ATT_DB == 0) - sprintf(buff, "ATT"); - printInfo(LAY_TOPBUTTONS_ATT_X, LAY_TOPBUTTONS_ATT_Y, LAY_TOPBUTTONS_WIDTH, LAY_TOPBUTTONS_HEIGHT, buff, COLOR->BUTTON_BACKGROUND, COLOR->BUTTON_TEXT, COLOR->BUTTON_INACTIVE_TEXT, TRX.ATT); - printInfo(LAY_TOPBUTTONS_FAST_X, LAY_TOPBUTTONS_FAST_Y, LAY_TOPBUTTONS_WIDTH, LAY_TOPBUTTONS_HEIGHT, "FAST", COLOR->BUTTON_BACKGROUND, COLOR->BUTTON_TEXT, COLOR->BUTTON_INACTIVE_TEXT, TRX.Fast); - printInfo(LAY_TOPBUTTONS_AGC_X, LAY_TOPBUTTONS_AGC_Y, LAY_TOPBUTTONS_WIDTH, LAY_TOPBUTTONS_HEIGHT, "AGC", COLOR->BUTTON_BACKGROUND, COLOR->BUTTON_TEXT, COLOR->BUTTON_INACTIVE_TEXT, CurrentVFO()->AGC); - printInfo(LAY_TOPBUTTONS_MUTE_X, LAY_TOPBUTTONS_MUTE_Y, LAY_TOPBUTTONS_WIDTH, LAY_TOPBUTTONS_HEIGHT, "MUTE", COLOR->BUTTON_BACKGROUND, COLOR->BUTTON_TEXT, COLOR->BUTTON_INACTIVE_TEXT, TRX_Mute); - printInfo(LAY_TOPBUTTONS_LOCK_X, LAY_TOPBUTTONS_LOCK_Y, LAY_TOPBUTTONS_WIDTH, LAY_TOPBUTTONS_HEIGHT, "LOCK", COLOR->BUTTON_BACKGROUND, COLOR_RED, COLOR->BUTTON_INACTIVE_TEXT, TRX.Locked); - - //bottom buttons - printInfo(LAY_BOTTOMBUTTONS_X1, LAY_BOTTOMBUTTONS_Y, LAY_BOTTOMBUTTONS_WIDTH, LAY_BOTTOMBUTTONS_HEIGHT, PERIPH_FrontPanel_BottomScroll_Buttons_Active[0].name , COLOR->BUTTON_BACKGROUND, COLOR->BOTTOM_BUTTONS_COLOR, COLOR->BUTTON_INACTIVE_TEXT, true); - printInfo(LAY_BOTTOMBUTTONS_X2, LAY_BOTTOMBUTTONS_Y, LAY_BOTTOMBUTTONS_WIDTH, LAY_BOTTOMBUTTONS_HEIGHT, PERIPH_FrontPanel_BottomScroll_Buttons_Active[1].name, COLOR->BUTTON_BACKGROUND, COLOR->BOTTOM_BUTTONS_COLOR, COLOR->BUTTON_INACTIVE_TEXT, true); - printInfo(LAY_BOTTOMBUTTONS_X3, LAY_BOTTOMBUTTONS_Y, LAY_BOTTOMBUTTONS_WIDTH, LAY_BOTTOMBUTTONS_HEIGHT, PERIPH_FrontPanel_BottomScroll_Buttons_Active[2].name, COLOR->BUTTON_BACKGROUND, COLOR->BOTTOM_BUTTONS_COLOR, COLOR->BUTTON_INACTIVE_TEXT, true); - printInfo(LAY_BOTTOMBUTTONS_X4, LAY_BOTTOMBUTTONS_Y, LAY_BOTTOMBUTTONS_WIDTH, LAY_BOTTOMBUTTONS_HEIGHT, PERIPH_FrontPanel_BottomScroll_Buttons_Active[3].name, COLOR->BUTTON_BACKGROUND, COLOR->BOTTOM_BUTTONS_COLOR, COLOR->BUTTON_INACTIVE_TEXT, true); - - LCD_UpdateQuery.TopButtons = false; - if(redraw) - LCD_UpdateQuery.TopButtonsRedraw = false; - LCD_busy = false; -} - -static void LCD_displayBottomButtons(bool redraw) -{ - // display the bottom buttons - if (LCD_systemMenuOpened) - return; - if (LCD_busy) - { - LCD_UpdateQuery.BottomButtons = true; - return; - } - LCD_busy = true; - - LCD_UpdateQuery.BottomButtons = false; - if(redraw) - LCD_UpdateQuery.BottomButtonsRedraw = false; - LCD_busy = false; -} - -static void LCD_displayFreqInfo(bool redraw) -{ // display the frequency on the screen - if (LCD_systemMenuOpened) - return; - if (!redraw && (LCD_last_showed_freq == CurrentVFO()->Freq) - ) - return; - if (LCD_busy) - { - LCD_UpdateQuery.FreqInfo = true; - if(redraw) - LCD_UpdateQuery.FreqInfoRedraw = true; - return; - } - LCD_busy = true; - - uint32_t display_freq = CurrentVFO()->Freq; - if(TRX.Transverter_Enabled) - display_freq += TRX.Transverter_Offset_Mhz * 1000 * 1000; - if(display_freq > 999999999) - display_freq = 999999999; - LCD_last_showed_freq = display_freq; - - uint16_t mhz_x_offset = 0; - if (display_freq>= 100000000) - mhz_x_offset = LAY_FREQ_X_OFFSET_100; - else if (display_freq >= 10000000) - mhz_x_offset = LAY_FREQ_X_OFFSET_10; - else - mhz_x_offset = LAY_FREQ_X_OFFSET_1; - - if (redraw) - LCDDriver_Fill_RectWH(LAY_FREQ_LEFT_MARGIN, LAY_FREQ_Y_TOP, LCD_WIDTH - LAY_FREQ_LEFT_MARGIN - LAY_FREQ_RIGHT_MARGIN, LAY_FREQ_BLOCK_HEIGHT, BG_COLOR); - - if((mhz_x_offset - LAY_FREQ_LEFT_MARGIN) > 0) - LCDDriver_Fill_RectWH(LAY_FREQ_LEFT_MARGIN, LAY_FREQ_Y_BASELINE - LAY_FREQ_HEIGHT, mhz_x_offset - LAY_FREQ_LEFT_MARGIN, LAY_FREQ_HEIGHT, BG_COLOR); - - // add spaces to output the frequency - uint16_t hz = (display_freq % 1000); - uint16_t khz = ((display_freq / 1000) % 1000); - uint16_t mhz = ((display_freq / 1000000) % 1000000); - sprintf(LCD_freq_string_hz, "%d", hz); - sprintf(LCD_freq_string_khz, "%d", khz); - sprintf(LCD_freq_string_mhz, "%d", mhz); - - if (redraw || (LCD_last_showed_freq_mhz != mhz)) - { - LCDDriver_printTextFont(LCD_freq_string_mhz, mhz_x_offset, LAY_FREQ_Y_BASELINE, COLOR->FREQ_MHZ, BG_COLOR, LAY_FREQ_FONT); - LCD_last_showed_freq_mhz = mhz; - } - - char buff[50] = ""; - if (redraw || (LCD_last_showed_freq_khz != khz)) - { - addSymbols(buff, LCD_freq_string_khz, 3, "0", false); - LCDDriver_printTextFont(buff, LAY_FREQ_X_OFFSET_KHZ, LAY_FREQ_Y_BASELINE, COLOR->FREQ_KHZ, BG_COLOR, LAY_FREQ_FONT); - LCD_last_showed_freq_khz = khz; - } - if (redraw || (LCD_last_showed_freq_hz != hz)) - { - addSymbols(buff, LCD_freq_string_hz, 3, "0", false); - LCDDriver_printTextFont(buff, LAY_FREQ_X_OFFSET_HZ, LAY_FREQ_Y_BASELINE_SMALL, COLOR->FREQ_HZ, BG_COLOR, LAY_FREQ_SMALL_FONT); - LCD_last_showed_freq_hz = hz; - } - - NeedSaveSettings = true; - - LCD_UpdateQuery.FreqInfo = false; - if(redraw) - LCD_UpdateQuery.FreqInfoRedraw = false; - - LCD_busy = false; -} - -static void LCD_drawSMeter(void) -{ - // Labels on the scale - const float32_t step = LAY_STATUS_SMETER_WIDTH / 15.0f; - LCDDriver_printText("S", LAY_STATUS_BAR_X_OFFSET + (uint16_t)(step * 0.0f) - 2, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABELS_OFFSET_Y, COLOR->STATUS_BAR_LABELS, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - LCDDriver_printText("1", LAY_STATUS_BAR_X_OFFSET + (uint16_t)(step * 1.0f) - 2, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABELS_OFFSET_Y, COLOR->STATUS_BAR_LABELS, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - LCDDriver_printText("3", LAY_STATUS_BAR_X_OFFSET + (uint16_t)(step * 3.0f) - 2, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABELS_OFFSET_Y, COLOR->STATUS_BAR_LABELS, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - LCDDriver_printText("5", LAY_STATUS_BAR_X_OFFSET + (uint16_t)(step * 5.0f) - 2, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABELS_OFFSET_Y, COLOR->STATUS_BAR_LABELS, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - LCDDriver_printText("7", LAY_STATUS_BAR_X_OFFSET + (uint16_t)(step * 7.0f) - 2, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABELS_OFFSET_Y, COLOR->STATUS_BAR_LABELS, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - LCDDriver_printText("9", LAY_STATUS_BAR_X_OFFSET + (uint16_t)(step * 9.0f) - 2, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABELS_OFFSET_Y, COLOR->STATUS_BAR_LABELS, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - LCDDriver_printText("+20", LAY_STATUS_BAR_X_OFFSET + (uint16_t)(step * 11.0f) - 10, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABELS_OFFSET_Y, COLOR->STATUS_BAR_LABELS, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - LCDDriver_printText("+40", LAY_STATUS_BAR_X_OFFSET + (uint16_t)(step * 13.0f) - 10, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABELS_OFFSET_Y, COLOR->STATUS_BAR_LABELS, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - LCDDriver_printText("+60", LAY_STATUS_BAR_X_OFFSET + (uint16_t)(step * 15.0f) - 10, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABELS_OFFSET_Y, COLOR->STATUS_BAR_LABELS, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - for (uint8_t i = 0; i <= 15; i ++) - { - uint16_t color = COLOR->STATUS_BAR_LEFT; - if (i >= 9) - color = COLOR->STATUS_BAR_RIGHT; - if ((i % 2) != 0 || i == 0) - { - LCDDriver_drawFastVLine(LAY_STATUS_BAR_X_OFFSET + (uint16_t)(step * i) - 1, LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET, -4, color); - LCDDriver_drawFastVLine(LAY_STATUS_BAR_X_OFFSET + (uint16_t)(step * i), LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET, -6, color); - LCDDriver_drawFastVLine(LAY_STATUS_BAR_X_OFFSET + (uint16_t)(step * i) + 1, LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET, -4, color); - } - else - LCDDriver_drawFastVLine(LAY_STATUS_BAR_X_OFFSET + (uint16_t)(step * i), LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET, -3, color); - } - - // S-meter frame - LCDDriver_drawRectXY(LAY_STATUS_BAR_X_OFFSET, LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET, LAY_STATUS_BAR_X_OFFSET + (uint16_t)(step * 9.0f) - 2, LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET + 1, COLOR->STATUS_BAR_LEFT); - LCDDriver_drawRectXY(LAY_STATUS_BAR_X_OFFSET + (uint16_t)(step * 9.0f) - 1, LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET, LAY_STATUS_BAR_X_OFFSET + LAY_STATUS_SMETER_WIDTH, LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET + 1, COLOR->STATUS_BAR_RIGHT); - LCDDriver_drawRectXY(LAY_STATUS_BAR_X_OFFSET, LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET + LAY_STATUS_BAR_HEIGHT, LAY_STATUS_BAR_X_OFFSET + (uint16_t)(step * 9.0f) - 2, LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET + LAY_STATUS_BAR_HEIGHT + 1, COLOR->STATUS_BAR_LEFT); - LCDDriver_drawRectXY(LAY_STATUS_BAR_X_OFFSET + (uint16_t)(step * 9.0f) - 1, LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET + LAY_STATUS_BAR_HEIGHT, LAY_STATUS_BAR_X_OFFSET + LAY_STATUS_SMETER_WIDTH, LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET + LAY_STATUS_BAR_HEIGHT + 1, COLOR->STATUS_BAR_RIGHT); -} - -static void LCD_displayStatusInfoGUI(bool redraw) -{ - // display RX / TX and s-meter - if (LCD_systemMenuOpened) - return; - if (LCD_busy) - { - if (redraw) - LCD_UpdateQuery.StatusInfoGUIRedraw = true; - else - LCD_UpdateQuery.StatusInfoGUI = true; - return; - } - LCD_busy = true; - - if (redraw) - LCDDriver_Fill_RectWH(0, LAY_STATUS_Y_OFFSET, LCD_WIDTH, LAY_STATUS_HEIGHT, BG_COLOR); - - if (TRX_on_TX()) - { - if (TRX_Tune) - LCDDriver_printTextFont("TU", LAY_STATUS_TXRX_X_OFFSET, (LAY_STATUS_Y_OFFSET + LAY_STATUS_TXRX_Y_OFFSET), COLOR->STATUS_TX, BG_COLOR, LAY_STATUS_TXRX_FONT); - else - LCDDriver_printTextFont("TX", LAY_STATUS_TXRX_X_OFFSET + 1, (LAY_STATUS_Y_OFFSET + LAY_STATUS_TXRX_Y_OFFSET), COLOR->STATUS_TX, BG_COLOR, LAY_STATUS_TXRX_FONT); - - // frame of the SWR meter - const float32_t step = LAY_STATUS_PMETER_WIDTH / 16.0f; - LCDDriver_drawRectXY(LAY_STATUS_BAR_X_OFFSET, LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET, LAY_STATUS_BAR_X_OFFSET + (uint16_t)(step * 9.0f) , LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET + 1, COLOR->STATUS_BAR_LEFT); - LCDDriver_drawRectXY(LAY_STATUS_BAR_X_OFFSET + (uint16_t)(step * 9.0f), LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET, LAY_STATUS_BAR_X_OFFSET + LAY_STATUS_PMETER_WIDTH, LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET + 1, COLOR->STATUS_BAR_RIGHT); - LCDDriver_drawRectXY(LAY_STATUS_BAR_X_OFFSET, LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET + LAY_STATUS_BAR_HEIGHT, LAY_STATUS_BAR_X_OFFSET + (uint16_t)(step * 9.0f), LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET + LAY_STATUS_BAR_HEIGHT + 1, COLOR->STATUS_BAR_LEFT); - LCDDriver_drawRectXY(LAY_STATUS_BAR_X_OFFSET + (uint16_t)(step * 9.0f), LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET + LAY_STATUS_BAR_HEIGHT, LAY_STATUS_BAR_X_OFFSET + LAY_STATUS_PMETER_WIDTH, LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET + LAY_STATUS_BAR_HEIGHT + 1, COLOR->STATUS_BAR_RIGHT); - - for (uint8_t i = 0; i <= 16; i++) - { - uint16_t color = COLOR->STATUS_BAR_LEFT; - if (i > 9) - color = COLOR->STATUS_BAR_RIGHT; - if ((i % 2) == 0) - LCDDriver_drawFastVLine(LAY_STATUS_BAR_X_OFFSET + (uint16_t)(step * i), LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET, -10, color); - else - LCDDriver_drawFastVLine(LAY_STATUS_BAR_X_OFFSET + (uint16_t)(step * i), LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET, -5, color); - } - - LCDDriver_printText("SWR:", LAY_STATUS_BAR_X_OFFSET + LAY_STATUS_TX_LABELS_OFFSET_X, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABELS_OFFSET_Y, COLOR->STATUS_LABELS_TX, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - LCDDriver_printText("FWD:", LAY_STATUS_BAR_X_OFFSET + LAY_STATUS_TX_LABELS_OFFSET_X + LAY_STATUS_TX_LABELS_MARGIN_X, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABELS_OFFSET_Y, COLOR->STATUS_LABELS_TX, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - LCDDriver_printText("REF:", LAY_STATUS_BAR_X_OFFSET + LAY_STATUS_TX_LABELS_OFFSET_X + LAY_STATUS_TX_LABELS_MARGIN_X * 2, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABELS_OFFSET_Y, COLOR->STATUS_LABELS_TX, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - - // frame of the ALC meter - LCDDriver_drawRectXY(LAY_STATUS_BAR_X_OFFSET + LAY_STATUS_PMETER_WIDTH + LAY_STATUS_ALC_BAR_X_OFFSET, LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET, LAY_STATUS_BAR_X_OFFSET + LAY_STATUS_PMETER_WIDTH + LAY_STATUS_ALC_BAR_X_OFFSET + LAY_STATUS_AMETER_WIDTH, LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET + 1, COLOR->STATUS_BAR_LEFT); - LCDDriver_drawRectXY(LAY_STATUS_BAR_X_OFFSET + LAY_STATUS_PMETER_WIDTH + LAY_STATUS_ALC_BAR_X_OFFSET, LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET + LAY_STATUS_BAR_HEIGHT, LAY_STATUS_BAR_X_OFFSET + LAY_STATUS_PMETER_WIDTH + LAY_STATUS_ALC_BAR_X_OFFSET + LAY_STATUS_AMETER_WIDTH, LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET + LAY_STATUS_BAR_HEIGHT + 1, COLOR->STATUS_BAR_LEFT); - LCDDriver_printText("ALC:", LAY_STATUS_BAR_X_OFFSET + LAY_STATUS_PMETER_WIDTH + LAY_STATUS_ALC_BAR_X_OFFSET + LAY_STATUS_TX_LABELS_OFFSET_X, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABELS_OFFSET_Y, COLOR->STATUS_LABELS_TX, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - } - else - { - LCD_UpdateQuery.StatusInfoBar = true; - LCDDriver_printTextFont("RX", LAY_STATUS_TXRX_X_OFFSET, (LAY_STATUS_Y_OFFSET + LAY_STATUS_TXRX_Y_OFFSET), COLOR->STATUS_RX, BG_COLOR, LAY_STATUS_TXRX_FONT); - //Frequency delimiters - LCDDriver_printTextFont(".", LAY_FREQ_DELIMITER_X1_OFFSET, LAY_FREQ_Y_BASELINE + LAY_FREQ_DELIMITER_Y_OFFSET, COLOR->FREQ_KHZ, BG_COLOR, LAY_FREQ_FONT); - LCDDriver_printTextFont(".", LAY_FREQ_DELIMITER_X2_OFFSET, LAY_FREQ_Y_BASELINE + LAY_FREQ_DELIMITER_Y_OFFSET, COLOR->FREQ_HZ, BG_COLOR, LAY_FREQ_FONT); - } - - //VFO indicator - if (!TRX.current_vfo) //VFO-A - { - printInfo(LAY_STATUS_VFO_X_OFFSET, (LAY_STATUS_Y_OFFSET + LAY_STATUS_VFO_Y_OFFSET), LAY_STATUS_VFO_BLOCK_WIDTH, LAY_STATUS_VFO_BLOCK_HEIGHT, "A", COLOR->STATUS_VFO_BG, COLOR->STATUS_VFO, COLOR->STATUS_VFO, true); - } - else //VFO-B - { - printInfo(LAY_STATUS_VFO_X_OFFSET, (LAY_STATUS_Y_OFFSET + LAY_STATUS_VFO_Y_OFFSET), LAY_STATUS_VFO_BLOCK_WIDTH, LAY_STATUS_VFO_BLOCK_HEIGHT, "B", COLOR->STATUS_VFO_BG, COLOR->STATUS_VFO, COLOR->STATUS_VFO, true); - } - - //Mode indicator - printInfo(LAY_STATUS_MODE_X_OFFSET, (LAY_STATUS_Y_OFFSET + LAY_STATUS_MODE_Y_OFFSET), LAY_STATUS_MODE_BLOCK_WIDTH, LAY_STATUS_MODE_BLOCK_HEIGHT, (char *)MODE_DESCR[CurrentVFO()->Mode], BG_COLOR, COLOR->STATUS_MODE, COLOR->STATUS_MODE, true); - - /////BW trapezoid - LCDDriver_Fill_RectWH(LAY_BW_TRAPEZ_POS_X, LAY_BW_TRAPEZ_POS_Y, LAY_BW_TRAPEZ_WIDTH, LAY_BW_TRAPEZ_HEIGHT, BG_COLOR); //clear back -#define bw_trapez_margin 10 - uint16_t bw_trapez_top_line_width = (uint16_t)(LAY_BW_TRAPEZ_WIDTH * 0.9f - bw_trapez_margin * 2); - //border - LCDDriver_drawFastHLine(LAY_BW_TRAPEZ_POS_X + LAY_BW_TRAPEZ_WIDTH / 2 - bw_trapez_top_line_width / 2, LAY_BW_TRAPEZ_POS_Y, bw_trapez_top_line_width, COLOR->BW_TRAPEZ_BORDER); //top - LCDDriver_drawFastHLine(LAY_BW_TRAPEZ_POS_X, LAY_BW_TRAPEZ_POS_Y + LAY_BW_TRAPEZ_HEIGHT, LAY_BW_TRAPEZ_WIDTH, COLOR->BW_TRAPEZ_BORDER); //bottom - LCDDriver_drawLine(LAY_BW_TRAPEZ_POS_X + LAY_BW_TRAPEZ_WIDTH / 2 - bw_trapez_top_line_width / 2 - bw_trapez_margin, LAY_BW_TRAPEZ_POS_Y + LAY_BW_TRAPEZ_HEIGHT, LAY_BW_TRAPEZ_POS_X + LAY_BW_TRAPEZ_WIDTH / 2 - bw_trapez_top_line_width / 2, LAY_BW_TRAPEZ_POS_Y, COLOR->BW_TRAPEZ_BORDER); //left - LCDDriver_drawLine(LAY_BW_TRAPEZ_POS_X + LAY_BW_TRAPEZ_WIDTH / 2 + bw_trapez_top_line_width / 2 + bw_trapez_margin, LAY_BW_TRAPEZ_POS_Y + LAY_BW_TRAPEZ_HEIGHT, LAY_BW_TRAPEZ_POS_X + LAY_BW_TRAPEZ_WIDTH / 2 + bw_trapez_top_line_width / 2, LAY_BW_TRAPEZ_POS_Y, COLOR->BW_TRAPEZ_BORDER); //right - //bw fill - float32_t bw_trapez_bw_left_width = 1.0f; - float32_t bw_trapez_bw_right_width = 1.0f; - float32_t bw_trapez_bw_hpf_margin = 0.0f; - switch (CurrentVFO()->Mode) - { - case TRX_MODE_LSB: - bw_trapez_bw_hpf_margin = 1.0f / (float32_t)MAX_LPF_WIDTH_SSB * TRX.SSB_HPF_Filter; - case TRX_MODE_DIGI_L: - bw_trapez_bw_left_width = 1.0f / (float32_t)MAX_LPF_WIDTH_SSB * TRX.SSB_LPF_Filter; - bw_trapez_bw_right_width = 0.0f; - break; - case TRX_MODE_CW_L: - bw_trapez_bw_hpf_margin = 1.0f / (float32_t)MAX_LPF_WIDTH_SSB * TRX.CW_HPF_Filter * 4.0f; - bw_trapez_bw_left_width = 1.0f / (float32_t)MAX_LPF_WIDTH_CW * TRX.CW_LPF_Filter; - bw_trapez_bw_right_width = 0.0f; - break; - case TRX_MODE_USB: - bw_trapez_bw_hpf_margin = 1.0f / (float32_t)MAX_LPF_WIDTH_SSB * TRX.SSB_HPF_Filter; - case TRX_MODE_DIGI_U: - bw_trapez_bw_left_width = 0.0f; - bw_trapez_bw_right_width = 1.0f / (float32_t)MAX_LPF_WIDTH_SSB * TRX.SSB_LPF_Filter; - break; - case TRX_MODE_CW_U: - bw_trapez_bw_left_width = 0.0f; - bw_trapez_bw_right_width = 1.0f / (float32_t)MAX_LPF_WIDTH_CW * TRX.CW_LPF_Filter; - bw_trapez_bw_hpf_margin = 1.0f / (float32_t)MAX_LPF_WIDTH_SSB * TRX.CW_HPF_Filter * 4.0f; - break; - case TRX_MODE_NFM: - bw_trapez_bw_left_width = 1.0f / (float32_t)MAX_LPF_WIDTH_NFM * TRX.FM_LPF_Filter; - bw_trapez_bw_right_width = 1.0f / (float32_t)MAX_LPF_WIDTH_NFM * TRX.FM_LPF_Filter; - break; - case TRX_MODE_AM: - bw_trapez_bw_left_width = 1.0f / (float32_t)MAX_LPF_WIDTH_AM * TRX.AM_LPF_Filter; - bw_trapez_bw_right_width = 1.0f / (float32_t)MAX_LPF_WIDTH_AM * TRX.AM_LPF_Filter; - break; - case TRX_MODE_WFM: - bw_trapez_bw_left_width = 1.0f; - bw_trapez_bw_right_width = 1.0f; - break; - } - uint16_t bw_trapez_left_width = (uint16_t)(bw_trapez_top_line_width / 2 * bw_trapez_bw_left_width); - uint16_t bw_trapez_right_width = (uint16_t)(bw_trapez_top_line_width / 2 * bw_trapez_bw_right_width); - uint16_t bw_trapez_bw_hpf_margin_width = (uint16_t)(bw_trapez_top_line_width / 2 * bw_trapez_bw_hpf_margin); - if (bw_trapez_left_width > 0) //left wing - { - LCDDriver_Fill_RectWH(LAY_BW_TRAPEZ_POS_X + LAY_BW_TRAPEZ_WIDTH / 2 - bw_trapez_left_width, LAY_BW_TRAPEZ_POS_Y + 1, bw_trapez_left_width - bw_trapez_bw_hpf_margin_width, LAY_BW_TRAPEZ_HEIGHT - 2, COLOR->BW_TRAPEZ_FILL); - LCDDriver_Fill_Triangle(LAY_BW_TRAPEZ_POS_X + LAY_BW_TRAPEZ_WIDTH / 2 - bw_trapez_left_width - bw_trapez_margin + 1, LAY_BW_TRAPEZ_POS_Y + LAY_BW_TRAPEZ_HEIGHT - 1, LAY_BW_TRAPEZ_POS_X + LAY_BW_TRAPEZ_WIDTH / 2 - bw_trapez_left_width, LAY_BW_TRAPEZ_POS_Y + 1, LAY_BW_TRAPEZ_POS_X + LAY_BW_TRAPEZ_WIDTH / 2 - bw_trapez_left_width, LAY_BW_TRAPEZ_POS_Y + LAY_BW_TRAPEZ_HEIGHT - 1, COLOR->BW_TRAPEZ_FILL); - if (bw_trapez_bw_hpf_margin_width > 0) - LCDDriver_Fill_Triangle(LAY_BW_TRAPEZ_POS_X + LAY_BW_TRAPEZ_WIDTH / 2 - bw_trapez_bw_hpf_margin_width, LAY_BW_TRAPEZ_POS_Y + 1, LAY_BW_TRAPEZ_POS_X + LAY_BW_TRAPEZ_WIDTH / 2 - bw_trapez_bw_hpf_margin_width, LAY_BW_TRAPEZ_POS_Y + LAY_BW_TRAPEZ_HEIGHT - 1, LAY_BW_TRAPEZ_POS_X + LAY_BW_TRAPEZ_WIDTH / 2, LAY_BW_TRAPEZ_POS_Y + LAY_BW_TRAPEZ_HEIGHT - 1, COLOR->BW_TRAPEZ_FILL); - } - if (bw_trapez_bw_right_width > 0) //right wing - { - LCDDriver_Fill_RectWH(LAY_BW_TRAPEZ_POS_X + LAY_BW_TRAPEZ_WIDTH / 2 + bw_trapez_bw_hpf_margin_width, LAY_BW_TRAPEZ_POS_Y + 1, bw_trapez_right_width - bw_trapez_bw_hpf_margin_width, LAY_BW_TRAPEZ_HEIGHT - 2, COLOR->BW_TRAPEZ_FILL); - LCDDriver_Fill_Triangle(LAY_BW_TRAPEZ_POS_X + LAY_BW_TRAPEZ_WIDTH / 2 + bw_trapez_right_width + bw_trapez_margin - 1, LAY_BW_TRAPEZ_POS_Y + LAY_BW_TRAPEZ_HEIGHT - 1, LAY_BW_TRAPEZ_POS_X + LAY_BW_TRAPEZ_WIDTH / 2 + bw_trapez_right_width, LAY_BW_TRAPEZ_POS_Y + 1, LAY_BW_TRAPEZ_POS_X + LAY_BW_TRAPEZ_WIDTH / 2 + bw_trapez_right_width, LAY_BW_TRAPEZ_POS_Y + LAY_BW_TRAPEZ_HEIGHT - 1, COLOR->BW_TRAPEZ_FILL); - if (bw_trapez_bw_hpf_margin_width > 0) - LCDDriver_Fill_Triangle(LAY_BW_TRAPEZ_POS_X + LAY_BW_TRAPEZ_WIDTH / 2 + bw_trapez_bw_hpf_margin_width, LAY_BW_TRAPEZ_POS_Y + 1, LAY_BW_TRAPEZ_POS_X + LAY_BW_TRAPEZ_WIDTH / 2 + bw_trapez_bw_hpf_margin_width, LAY_BW_TRAPEZ_POS_Y + LAY_BW_TRAPEZ_HEIGHT - 1, LAY_BW_TRAPEZ_POS_X + LAY_BW_TRAPEZ_WIDTH / 2, LAY_BW_TRAPEZ_POS_Y + LAY_BW_TRAPEZ_HEIGHT - 1, COLOR->BW_TRAPEZ_FILL); - } - //shift stripe - if (!TRX.ShiftEnabled || LCD_bw_trapez_stripe_pos == 0) - LCD_bw_trapez_stripe_pos = LAY_BW_TRAPEZ_POS_X + LAY_BW_TRAPEZ_WIDTH / 2; - LCDDriver_Fill_RectWH(LCD_bw_trapez_stripe_pos - 1, LAY_BW_TRAPEZ_POS_Y + LAY_BW_TRAPEZ_HEIGHT / 2, 3, LAY_BW_TRAPEZ_HEIGHT / 2, COLOR->BW_TRAPEZ_STRIPE); - /////END BW trapezoid - - LCD_UpdateQuery.StatusInfoGUI = false; - if (redraw) - LCD_UpdateQuery.StatusInfoGUIRedraw = false; - LCD_busy = false; -} - -static void LCD_displayStatusInfoBar(bool redraw) -{ - // S-meter and other information - if (LCD_systemMenuOpened) - return; - if (LCD_busy) - { - LCD_UpdateQuery.StatusInfoBar = true; - return; - } - LCD_busy = true; - char ctmp[50]; - const int width = LAY_STATUS_SMETER_WIDTH - 2; - - if (!TRX_on_TX()) - { - float32_t TRX_s_meter = (127.0f + TRX_RX_dBm); // 127dbm - S0, 6dBm - 1S div - if (CurrentVFO()->Freq >= 144000000) - TRX_s_meter = (147.0f + TRX_RX_dBm); // 147dbm - S0 for frequencies above 144mhz - - if (TRX_s_meter < 54.01f) // first 9 points of meter is 6 dB each - TRX_s_meter = (width / 15.0f) * (TRX_s_meter / 6.0f); - else // the remaining 6 points, 10 dB each - TRX_s_meter = ((width / 15.0f) * 9.0f) + ((TRX_s_meter - 54.0f) / 10.0f) * (width / 15.0f); - - TRX_s_meter += 1.0f; - if (TRX_s_meter > width) - TRX_s_meter = width; - if (TRX_s_meter < 1.0f) - TRX_s_meter = 1.0f; - - float32_t s_width = LCD_last_s_meter * 0.75f + TRX_s_meter * 0.25f; // smooth the movement of the S-meter - - if (redraw || (LCD_last_s_meter != s_width)) - { - //clear old bar and stripe - if ((LCD_last_s_meter - s_width) > 0) - LCDDriver_Fill_RectWH(LAY_STATUS_BAR_X_OFFSET + (uint16_t)s_width, LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET + 2, (uint16_t)(LCD_last_s_meter - s_width + 1), LAY_STATUS_BAR_HEIGHT - 3, BG_COLOR); - LCDDriver_Fill_RectWH(LAY_STATUS_BAR_X_OFFSET + (uint16_t)LCD_last_s_meter, LAY_STATUS_Y_OFFSET + 5, 2, LAY_STATUS_SMETER_MARKER_HEIGHT, BG_COLOR); - - // bar - LCDDriver_Fill_RectWH(LAY_STATUS_BAR_X_OFFSET, LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET + 2, (uint16_t)s_width, LAY_STATUS_BAR_HEIGHT - 3, COLOR->STATUS_SMETER); - - // peak - static uint16_t smeter_peak_x = 0; - static uint32_t smeter_peak_settime = 0; - if(smeter_peak_x > s_width) - LCDDriver_Fill_RectWH(LAY_STATUS_BAR_X_OFFSET + smeter_peak_x, LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET + 2, 2, LAY_STATUS_BAR_HEIGHT - 3, BG_COLOR); //clear old peak - if(smeter_peak_x > 0 && ((HAL_GetTick() - smeter_peak_settime) > LAY_STATUS_SMETER_PEAK_HOLDTIME)) - smeter_peak_x--; - if(s_width > smeter_peak_x) - { - smeter_peak_x = (uint16_t)s_width; - smeter_peak_settime = HAL_GetTick(); - } - LCDDriver_Fill_RectWH(LAY_STATUS_BAR_X_OFFSET + smeter_peak_x, LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET + 2, 2, LAY_STATUS_BAR_HEIGHT - 3, COLOR->STATUS_SMETER_PEAK); - - // stripe - LCD_drawSMeter(); - LCDDriver_Fill_RectWH(LAY_STATUS_BAR_X_OFFSET + (uint16_t)s_width, LAY_STATUS_Y_OFFSET + 5, 2, LAY_STATUS_SMETER_MARKER_HEIGHT, COLOR->STATUS_SMETER_STRIPE); - - LCD_last_s_meter = s_width; - } - - //print dBm value - sprintf(ctmp, "%ddBm", TRX_RX_dBm); - addSymbols(ctmp, ctmp, 7, " ", true); - LCDDriver_printText(ctmp, LAY_STATUS_LABEL_DBM_X_OFFSET, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABEL_DBM_Y_OFFSET, COLOR->STATUS_LABEL_DBM, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - - //print s-meter value - static float32_t TRX_RX_dBm_averaging = -120.0f; - TRX_RX_dBm_averaging = 0.97f * TRX_RX_dBm_averaging + 0.03f * TRX_RX_dBm; - if(TRX_RX_dBm > TRX_RX_dBm_averaging) - TRX_RX_dBm_averaging = TRX_RX_dBm; - - if (CurrentVFO()->Freq < 144000000) - { - if (TRX_RX_dBm_averaging <= -118.0f) - sprintf(ctmp, "S1"); - else if (TRX_RX_dBm_averaging <= -112.0f) - sprintf(ctmp, "S2"); - else if (TRX_RX_dBm_averaging <= -106.0f) - sprintf(ctmp, "S3"); - else if (TRX_RX_dBm_averaging <= -100.0f) - sprintf(ctmp, "S4"); - else if (TRX_RX_dBm_averaging <= -94.0f) - sprintf(ctmp, "S5"); - else if (TRX_RX_dBm_averaging <= -88.0f) - sprintf(ctmp, "S6"); - else if (TRX_RX_dBm_averaging <= -82.0f) - sprintf(ctmp, "S7"); - else if (TRX_RX_dBm_averaging <= -76.0f) - sprintf(ctmp, "S8"); - else if (TRX_RX_dBm_averaging <= -68.0f) - sprintf(ctmp, "S9"); - else if (TRX_RX_dBm_averaging <= -58.0f) - sprintf(ctmp, "S9+10"); - else if (TRX_RX_dBm_averaging <= -48.0f) - sprintf(ctmp, "S9+20"); - else if (TRX_RX_dBm_averaging <= -38.0f) - sprintf(ctmp, "S9+30"); - else if (TRX_RX_dBm_averaging <= -28.0f) - sprintf(ctmp, "S9+40"); - else - sprintf(ctmp, "S9+60"); - } - else - { - if (TRX_RX_dBm_averaging <= -138.0f) - sprintf(ctmp, "S1"); - else if (TRX_RX_dBm_averaging <= -132.0f) - sprintf(ctmp, "S2"); - else if (TRX_RX_dBm_averaging <= -126.0f) - sprintf(ctmp, "S3"); - else if (TRX_RX_dBm_averaging <= -120.0f) - sprintf(ctmp, "S4"); - else if (TRX_RX_dBm_averaging <= -114.0f) - sprintf(ctmp, "S5"); - else if (TRX_RX_dBm_averaging <= -108.0f) - sprintf(ctmp, "S6"); - else if (TRX_RX_dBm_averaging <= -102.0f) - sprintf(ctmp, "S7"); - else if (TRX_RX_dBm_averaging <= -96.0f) - sprintf(ctmp, "S8"); - else if (TRX_RX_dBm_averaging <= -88.0f) - sprintf(ctmp, "S9"); - else if (TRX_RX_dBm_averaging <= -78.0f) - sprintf(ctmp, "S9+10"); - else if (TRX_RX_dBm_averaging <= -68.0f) - sprintf(ctmp, "S9+20"); - else if (TRX_RX_dBm_averaging <= -58.0f) - sprintf(ctmp, "S9+30"); - else if (TRX_RX_dBm_averaging <= -48.0f) - sprintf(ctmp, "S9+40"); - else - sprintf(ctmp, "S9+60"); - } - addSymbols(ctmp, ctmp, 6, " ", true); - LCDDriver_printTextFont(ctmp, LAY_STATUS_LABEL_S_VAL_X_OFFSET, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABEL_S_VAL_Y_OFFSET, COLOR->STATUS_LABEL_S_VAL, BG_COLOR, LAY_STATUS_LABEL_S_VAL_FONT); - } - else - { - //SWR - LCDDriver_Fill_RectWH(LAY_STATUS_BAR_X_OFFSET + LAY_STATUS_TX_LABELS_OFFSET_X + LAY_STATUS_SMETER_TXLABELS_PADDING, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABELS_OFFSET_Y, LAY_STATUS_TX_LABELS_VAL_WIDTH, LAY_STATUS_TX_LABELS_VAL_HEIGHT, BG_COLOR); - sprintf(ctmp, "%.1f", (double)TRX_SWR); - LCDDriver_printText(ctmp, LAY_STATUS_BAR_X_OFFSET + LAY_STATUS_TX_LABELS_OFFSET_X + LAY_STATUS_SMETER_TXLABELS_PADDING, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABELS_OFFSET_Y, COLOR_RED, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - - //FWD - LCDDriver_Fill_RectWH(LAY_STATUS_BAR_X_OFFSET + LAY_STATUS_TX_LABELS_OFFSET_X + LAY_STATUS_SMETER_TXLABELS_MARGIN + LAY_STATUS_SMETER_TXLABELS_PADDING, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABELS_OFFSET_Y, LAY_STATUS_TX_LABELS_VAL_WIDTH, LAY_STATUS_TX_LABELS_VAL_HEIGHT, BG_COLOR); - sprintf(ctmp, "%.1fW", (double)TRX_PWR_Forward); - LCDDriver_printText(ctmp, LAY_STATUS_BAR_X_OFFSET + LAY_STATUS_TX_LABELS_OFFSET_X + LAY_STATUS_SMETER_TXLABELS_MARGIN + LAY_STATUS_SMETER_TXLABELS_PADDING, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABELS_OFFSET_Y, COLOR_RED, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - - //REF - LCDDriver_Fill_RectWH(LAY_STATUS_BAR_X_OFFSET + LAY_STATUS_TX_LABELS_OFFSET_X + LAY_STATUS_SMETER_TXLABELS_MARGIN * 2 + LAY_STATUS_SMETER_TXLABELS_PADDING, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABELS_OFFSET_Y, LAY_STATUS_TX_LABELS_VAL_WIDTH, LAY_STATUS_TX_LABELS_VAL_HEIGHT, BG_COLOR); - sprintf(ctmp, "%.1fW", (double)TRX_PWR_Backward); - LCDDriver_printText(ctmp, LAY_STATUS_BAR_X_OFFSET + LAY_STATUS_TX_LABELS_OFFSET_X + LAY_STATUS_SMETER_TXLABELS_MARGIN * 2 + LAY_STATUS_SMETER_TXLABELS_PADDING, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABELS_OFFSET_Y, COLOR_RED, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - - //SWR Meter - float32_t fwd_power = TRX_PWR_Forward; - if (fwd_power > MAX_RF_POWER) - fwd_power = MAX_RF_POWER; - uint16_t ref_width = (uint16_t)(TRX_PWR_Backward * (LAY_STATUS_PMETER_WIDTH - 2) / MAX_RF_POWER); - uint16_t fwd_width = (uint16_t)(fwd_power * (LAY_STATUS_PMETER_WIDTH - 2) / MAX_RF_POWER); - uint16_t est_width = (uint16_t)((MAX_RF_POWER - fwd_power) * (LAY_STATUS_PMETER_WIDTH - 2) / MAX_RF_POWER); - if (ref_width > fwd_width) - ref_width = fwd_width; - fwd_width -= ref_width; - LCDDriver_Fill_RectWH(LAY_STATUS_BAR_X_OFFSET + 1, LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET + 2, fwd_width, LAY_STATUS_BAR_HEIGHT - 3, COLOR->STATUS_SMETER); - LCDDriver_Fill_RectWH(LAY_STATUS_BAR_X_OFFSET + 1 + fwd_width, LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET + 2, ref_width, LAY_STATUS_BAR_HEIGHT - 3, COLOR->STATUS_BAR_RIGHT); - LCDDriver_Fill_RectWH(LAY_STATUS_BAR_X_OFFSET + 1 + fwd_width + ref_width, LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET + 2, est_width, LAY_STATUS_BAR_HEIGHT - 3, BG_COLOR); - - //ALC - LCDDriver_Fill_RectWH(LAY_STATUS_BAR_X_OFFSET + LAY_STATUS_PMETER_WIDTH + LAY_STATUS_TX_ALC_X_OFFSET, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABELS_OFFSET_Y, LAY_STATUS_TX_LABELS_VAL_WIDTH, LAY_STATUS_TX_LABELS_VAL_HEIGHT, BG_COLOR); - uint8_t alc_level = (uint8_t)(TRX_ALC * 100.0f); - sprintf(ctmp, "%d%%", alc_level); - LCDDriver_printText(ctmp, LAY_STATUS_BAR_X_OFFSET + LAY_STATUS_PMETER_WIDTH + LAY_STATUS_TX_ALC_X_OFFSET, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABELS_OFFSET_Y, COLOR->STATUS_BAR_LABELS, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - uint16_t alc_level_width = LAY_STATUS_AMETER_WIDTH * alc_level / 100; - if (alc_level_width > LAY_STATUS_AMETER_WIDTH) - alc_level_width = LAY_STATUS_AMETER_WIDTH; - LCDDriver_Fill_RectWH(LAY_STATUS_BAR_X_OFFSET + LAY_STATUS_PMETER_WIDTH + LAY_STATUS_ALC_BAR_X_OFFSET, LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET + 2, alc_level_width, LAY_STATUS_BAR_HEIGHT - 3, COLOR->STATUS_SMETER); - if (alc_level < 100) - LCDDriver_Fill_RectWH(LAY_STATUS_BAR_X_OFFSET + LAY_STATUS_PMETER_WIDTH + LAY_STATUS_ALC_BAR_X_OFFSET + alc_level_width, LAY_STATUS_Y_OFFSET + LAY_STATUS_BAR_Y_OFFSET + 2, LAY_STATUS_AMETER_WIDTH - alc_level_width, LAY_STATUS_BAR_HEIGHT - 3, COLOR->STATUS_LABEL_NOTCH); - } - - //Info labels - char buff[32] = ""; - //BW HPF-LPF - if ((CurrentVFO()->Mode == TRX_MODE_CW_L || CurrentVFO()->Mode == TRX_MODE_CW_U)) - sprintf(buff, "BW:%d-%d", TRX.CW_HPF_Filter, TRX.CW_LPF_Filter); - else if ((CurrentVFO()->Mode == TRX_MODE_DIGI_L || CurrentVFO()->Mode == TRX_MODE_DIGI_U)) - sprintf(buff, "BW:%d", TRX.SSB_LPF_Filter); - else if ((CurrentVFO()->Mode == TRX_MODE_LSB || CurrentVFO()->Mode == TRX_MODE_USB)) - sprintf(buff, "BW:%d-%d", TRX.SSB_HPF_Filter, TRX.SSB_LPF_Filter); - else if ((CurrentVFO()->Mode == TRX_MODE_AM)) - sprintf(buff, "BW:%d", TRX.AM_LPF_Filter); - else if ((CurrentVFO()->Mode == TRX_MODE_NFM) || (CurrentVFO()->Mode == TRX_MODE_WFM)) - sprintf(buff, "BW:%d", TRX.FM_LPF_Filter); - else - sprintf(buff, "BW:FULL"); - addSymbols(buff, buff, 12, " ", true); - LCDDriver_printText(buff, LAY_STATUS_LABEL_BW_X_OFFSET, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABEL_BW_Y_OFFSET, COLOR->STATUS_LABEL_BW, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - //RIT - if (TRX.CLAR) - sprintf(buff, "RIT:CLAR"); - else if (TRX.ShiftEnabled) - sprintf(buff, "SHIFT:%d", TRX_SHIFT); - else - sprintf(buff, "RIT:OFF"); - addSymbols(buff, buff, 12, " ", true); - LCDDriver_printText(buff, LAY_STATUS_LABEL_RIT_X_OFFSET, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABEL_RIT_Y_OFFSET, COLOR->STATUS_LABEL_RIT, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - - //VOLTAGE - sprintf(buff, "VLT:%.1f ", TRX_InVoltage); - LCDDriver_printText(buff, LAY_STATUS_LABEL_VLT_X_OFFSET, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABEL_VLT_Y_OFFSET, COLOR->STATUS_LABEL_VLT, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - //NOTCH - if (CurrentVFO()->AutoNotchFilter) - sprintf(buff, "NOTCH:AUTO"); - else - sprintf(buff, "NOTCH:OFF"); - addSymbols(buff, buff, 12, " ", true); - LCDDriver_printText(buff, LAY_STATUS_LABEL_NOTCH_X_OFFSET, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABEL_NOTCH_Y_OFFSET, COLOR->STATUS_LABEL_NOTCH, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - //FFT BW - if (TRX.FFT_Zoom == 1) - sprintf(buff, "FFT:48kHz"); - else if (TRX.FFT_Zoom == 2) - sprintf(buff, "FFT:24kHz"); - else if (TRX.FFT_Zoom == 4) - sprintf(buff, "FFT:12kHz"); - else if (TRX.FFT_Zoom == 8) - sprintf(buff, "FFT:6kHz "); - else if (TRX.FFT_Zoom == 16) - sprintf(buff, "FFT:3kHz "); - LCDDriver_printText(buff, LAY_STATUS_LABEL_FFT_BW_X_OFFSET, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABEL_FFT_BW_Y_OFFSET, COLOR->STATUS_LABELS_BW, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - - #if (defined(LAY_800x480)) - //LOCK - LCDDriver_printText("LOCK", LAY_STATUS_LABEL_LOCK_X_OFFSET, LAY_STATUS_Y_OFFSET + LAY_STATUS_LABEL_LOCK_Y_OFFSET, TRX.Locked ? COLOR->STATUS_LABEL_ACTIVE : COLOR->STATUS_LABEL_INACTIVE, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - #endif - - //ERRORS LABELS - LCDDriver_Fill_RectWH(LAY_STATUS_ERR_OFFSET_X, LAY_STATUS_ERR_OFFSET_Y, LAY_STATUS_ERR_WIDTH, LAY_STATUS_ERR_HEIGHT, BG_COLOR); - if (TRX_ADC_OTR && !TRX_on_TX()) - LCDDriver_printText("OVR", LAY_STATUS_ERR_OFFSET_X, LAY_STATUS_ERR_OFFSET_Y, COLOR->STATUS_ERR, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - if (TRX_DAC_OTR) - LCDDriver_printText("OVR", LAY_STATUS_ERR_OFFSET_X, LAY_STATUS_ERR_OFFSET_Y, COLOR->STATUS_ERR, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - //else if (TRX_ADC_MAXAMPLITUDE > (ADC_FULL_SCALE * 0.49f) || TRX_ADC_MINAMPLITUDE < -(ADC_FULL_SCALE * 0.49f)) - //LCDDriver_printText("MVR", LAY_STATUS_ERR_OFFSET_X, LAY_STATUS_ERR_OFFSET_Y, LAY_STATUS_ERR_COLOR, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - if (WM8731_Buffer_underrun && !TRX_on_TX()) - LCDDriver_printText("WBF", LAY_STATUS_ERR_OFFSET_X, LAY_STATUS_ERR_OFFSET_Y, COLOR->STATUS_ERR, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - if (FPGA_Buffer_underrun && TRX_on_TX()) - LCDDriver_printText("FBF", LAY_STATUS_ERR_OFFSET_X, LAY_STATUS_ERR_OFFSET_Y, COLOR->STATUS_ERR, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - if (RX_USB_AUDIO_underrun) - LCDDriver_printText("UBF", LAY_STATUS_ERR_OFFSET_X, LAY_STATUS_ERR_OFFSET_Y, COLOR->STATUS_ERR, BG_COLOR, LAY_STATUS_LABELS_FONT_SIZE); - - Time = RTC->TR; - Hours = ((Time >> 20) & 0x03) * 10 + ((Time >> 16) & 0x0f); - Minutes = ((Time >> 12) & 0x07) * 10 + ((Time >> 8) & 0x0f); - Seconds = ((Time >> 4) & 0x07) * 10 + ((Time >> 0) & 0x0f); - - if (redraw || (Hours != Last_showed_Hours)) - { - sprintf(ctmp, "%d", Hours); - addSymbols(ctmp, ctmp, 2, "0", false); - LCDDriver_printTextFont(ctmp, LAY_CLOCK_POS_HRS_X, LAY_CLOCK_POS_Y, COLOR->CLOCK, BG_COLOR, LAY_CLOCK_FONT); - LCDDriver_printTextFont(":", LCDDriver_GetCurrentXOffset(), LAY_CLOCK_POS_Y, COLOR->CLOCK, BG_COLOR, LAY_CLOCK_FONT); - Last_showed_Hours = Hours; - } - if (redraw || (Minutes != Last_showed_Minutes)) - { - sprintf(ctmp, "%d", Minutes); - addSymbols(ctmp, ctmp, 2, "0", false); - LCDDriver_printTextFont(ctmp, LAY_CLOCK_POS_MIN_X, LAY_CLOCK_POS_Y, COLOR->CLOCK, BG_COLOR, LAY_CLOCK_FONT); - LCDDriver_printTextFont(":", LCDDriver_GetCurrentXOffset(), LAY_CLOCK_POS_Y, COLOR->CLOCK, BG_COLOR, LAY_CLOCK_FONT); - Last_showed_Minutes = Minutes; - } - if (redraw || (Seconds != Last_showed_Seconds)) - { - sprintf(ctmp, "%d", Seconds); - addSymbols(ctmp, ctmp, 2, "0", false); - LCDDriver_printTextFont(ctmp, LAY_CLOCK_POS_SEC_X, LAY_CLOCK_POS_Y, COLOR->CLOCK, BG_COLOR, LAY_CLOCK_FONT); - Last_showed_Seconds = Seconds; - } - - LCD_UpdateQuery.StatusInfoBar = false; - if(redraw) - LCD_UpdateQuery.StatusInfoBarRedraw = false; - LCD_busy = false; -} - -void LCD_redraw(bool do_now) -{ - LCD_UpdateQuery.Background = true; - LCD_UpdateQuery.FreqInfoRedraw = true; - LCD_UpdateQuery.StatusInfoBarRedraw = true; - LCD_UpdateQuery.StatusInfoGUIRedraw = true; - LCD_UpdateQuery.TopButtonsRedraw = true; - LCD_UpdateQuery.BottomButtonsRedraw = true; - LCD_UpdateQuery.SystemMenu = true; - LCD_last_s_meter = 0; - LCD_last_showed_freq = 0; - Last_showed_Hours = 255; - Last_showed_Minutes = 255; - Last_showed_Seconds = 255; - LCD_last_showed_freq_mhz = 9999; - LCD_last_showed_freq_khz = 9999; - LCD_last_showed_freq_hz = 9999; - if(do_now) - LCD_doEvents(); -} - -void LCD_doEvents(void) -{ - if (LCD_busy) - return; - - if (LCD_UpdateQuery.Background) - { - LCD_busy = true; - LCDDriver_Fill(BG_COLOR); - LCD_UpdateQuery.Background = false; - LCD_busy = false; - } - if (LCD_UpdateQuery.TopButtons) - LCD_displayTopButtons(false); - if (LCD_UpdateQuery.TopButtonsRedraw) - LCD_displayTopButtons(true); - if (LCD_UpdateQuery.BottomButtons) - LCD_displayBottomButtons(false); - if (LCD_UpdateQuery.BottomButtonsRedraw) - LCD_displayBottomButtons(true); - if (LCD_UpdateQuery.FreqInfo) - LCD_displayFreqInfo(false); - if (LCD_UpdateQuery.FreqInfoRedraw) - LCD_displayFreqInfo(true); - if (LCD_UpdateQuery.StatusInfoGUI) - LCD_displayStatusInfoGUI(false); - if (LCD_UpdateQuery.StatusInfoGUIRedraw) - LCD_displayStatusInfoGUI(true); - if (LCD_UpdateQuery.StatusInfoBar) - LCD_displayStatusInfoBar(false); - if (LCD_UpdateQuery.StatusInfoBarRedraw) - LCD_displayStatusInfoBar(true); - if (LCD_UpdateQuery.SystemMenu) - SYSMENU_drawSystemMenu(false); - if (LCD_UpdateQuery.SystemMenuRedraw) - SYSMENU_drawSystemMenu(true); - if (LCD_UpdateQuery.SystemMenuCurrent) - { - SYSMENU_redrawCurrentItem(); - LCD_UpdateQuery.SystemMenuCurrent = false; - } - if (LCD_UpdateQuery.Tooltip) - LCD_printTooltip(); -} - -static void printInfoSmall(uint16_t x, uint16_t y, uint16_t width, uint16_t height, char *text, uint16_t back_color, uint16_t text_color, uint16_t inactive_color, bool active) -{ - uint16_t x1, y1, w, h; - LCDDriver_Fill_RectWH(x, y, width, height, back_color); - LCDDriver_getTextBounds(text, x, y, &x1, &y1, &w, &h, (GFXfont *)&FreeSans7pt7b); - //sendToDebug_str(text); sendToDebug_str(" "); sendToDebug_uint16(w, false); - LCDDriver_printTextFont(text, x + (width - w) / 2, y + (height / 2) + h / 2 - 1, active ? text_color : inactive_color, back_color, (GFXfont *)&FreeSans7pt7b); -} - -static void printInfo(uint16_t x, uint16_t y, uint16_t width, uint16_t height, char *text, uint16_t back_color, uint16_t text_color, uint16_t inactive_color, bool active) -{ - uint16_t x1, y1, w, h; - LCDDriver_Fill_RectWH(x, y, width, height, back_color); - LCDDriver_getTextBounds(text, x, y, &x1, &y1, &w, &h, (GFXfont *)&FreeSans9pt7b); - //sendToDebug_str(text); sendToDebug_str(" "); sendToDebug_uint16(w, false); - LCDDriver_printTextFont(text, x + (width - w) / 2, y + (height / 2) + h / 2 - 1, active ? text_color : inactive_color, back_color, (GFXfont *)&FreeSans9pt7b); -} - -void LCD_showError(char text[], bool redraw) -{ - if(!LCD_inited) - LCD_Init(); - LCD_busy = true; - LCDDriver_Fill(COLOR_RED); - uint16_t x1, y1, w, h; - LCDDriver_getTextBounds(text, 0, 0, &x1, &y1, &w, &h, (GFXfont *)&FreeSans12pt7b); - LCDDriver_printTextFont(text, LCD_WIDTH / 2 - w / 2, LCD_HEIGHT / 2 - h / 2, COLOR_WHITE, COLOR_RED, (GFXfont *)&FreeSans12pt7b); - if (redraw) - HAL_Delay(2000); - LCD_busy = false; - if (redraw) - LCD_redraw(true); -} - -void LCD_showInfo(char text[], bool autohide) -{ - LCD_busy = true; - LCDDriver_Fill(BG_COLOR); - uint16_t x1, y1, w, h; - LCDDriver_getTextBounds(text, 0, 0, &x1, &y1, &w, &h, (GFXfont *)&FreeSans12pt7b); - LCDDriver_printTextFont(text, LCD_WIDTH / 2 - w / 2, LCD_HEIGHT / 2 - h / 2, COLOR->CLOCK, BG_COLOR, (GFXfont *)&FreeSans12pt7b); - if(autohide) - { - HAL_Delay(2000); - LCD_busy = false; - LCD_redraw(true); - } -} - -void LCD_showTooltip(char text[]) -{ - Tooltip_DiplayStartTime = HAL_GetTick(); - strcpy(Tooltip_string, text); - Tooltip_first_draw = true; - if(LCD_UpdateQuery.Tooltip) //redraw old tooltip - LCD_UpdateQuery.FreqInfoRedraw = true; - LCD_UpdateQuery.Tooltip = true; -} - -static void LCD_printTooltip(void) -{ - LCD_UpdateQuery.Tooltip = true; - if(LCD_busy) - return; - if (LCD_systemMenuOpened) - { - LCD_UpdateQuery.Tooltip = false; - return; - } - LCD_busy = true; - - uint16_t x1, y1, w, h; - LCDDriver_getTextBounds(Tooltip_string, LAY_TOOLTIP_POS_X, LAY_TOOLTIP_POS_Y, &x1, &y1, &w, &h, (GFXfont *)&FreeSans12pt7b); - if(Tooltip_first_draw) - { - LCDDriver_Fill_RectWH(LAY_TOOLTIP_POS_X - w / 2, LAY_TOOLTIP_POS_Y, w + LAY_TOOLTIP_MARGIN * 2, h + LAY_TOOLTIP_MARGIN * 2, COLOR->TOOLTIP_BACK); - LCDDriver_drawRectXY(LAY_TOOLTIP_POS_X - w / 2, LAY_TOOLTIP_POS_Y, LAY_TOOLTIP_POS_X - w / 2 + w + LAY_TOOLTIP_MARGIN * 2, LAY_TOOLTIP_POS_Y + h + LAY_TOOLTIP_MARGIN * 2, COLOR->TOOLTIP_BORD); - Tooltip_first_draw = false; - } - LCDDriver_printTextFont(Tooltip_string, LAY_TOOLTIP_POS_X - w / 2 + LAY_TOOLTIP_MARGIN, LAY_TOOLTIP_POS_Y + LAY_TOOLTIP_MARGIN + h, COLOR->TOOLTIP_FORE, COLOR->TOOLTIP_BACK, (GFXfont *)&FreeSans12pt7b); - - LCD_busy = false; - if((HAL_GetTick() - Tooltip_DiplayStartTime) > LAY_TOOLTIP_TIMEOUT) - { - LCD_UpdateQuery.Tooltip = false; - LCD_UpdateQuery.FreqInfoRedraw = true; - } -} diff --git a/Src/lcd.h b/Src/lcd.h deleted file mode 100644 index 2289bc6..0000000 --- a/Src/lcd.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef LCD_h -#define LCD_h - -#include "stm32f4xx_hal.h" -#include "trx_manager.h" -#include "lcd_driver.h" -#include "screen_layout.h" - -typedef struct -{ - bool Background; - bool TopButtons; - bool TopButtonsRedraw; - bool BottomButtons; - bool BottomButtonsRedraw; - bool FreqInfo; - bool FreqInfoRedraw; - bool StatusInfoGUI; - bool StatusInfoGUIRedraw; - bool StatusInfoBar; - bool StatusInfoBarRedraw; - bool SystemMenu; - bool SystemMenuRedraw; - bool SystemMenuCurrent; - bool Tooltip; -} DEF_LCD_UpdateQuery; - -extern void LCD_Init(void); -extern void LCD_doEvents(void); -extern void LCD_showError(char text[], bool redraw); -extern void LCD_showInfo(char text[], bool autohide); -extern void LCD_redraw(bool do_now); -extern void LCD_showTooltip(char text[]); - -volatile extern DEF_LCD_UpdateQuery LCD_UpdateQuery; -volatile extern bool LCD_busy; -volatile extern bool LCD_systemMenuOpened; -extern STRUCT_COLOR_THEME* COLOR; - -#endif diff --git a/Src/lcd_480x320.c b/Src/lcd_480x320.c deleted file mode 100644 index 95188c4..0000000 --- a/Src/lcd_480x320.c +++ /dev/null @@ -1,5 +0,0 @@ -#include "lcd_driver.h" -#if (defined(LAY_480x320)) - #include "lcd.h" - -#endif diff --git a/Src/lcd_driver.c b/Src/lcd_driver.c deleted file mode 100644 index ab5d3e7..0000000 --- a/Src/lcd_driver.c +++ /dev/null @@ -1,403 +0,0 @@ -#include "settings.h" - -//Header files -#include "lcd_driver.h" -#include "main.h" -#include "fonts.h" -#include "functions.h" - -static bool _cp437 = false; -static uint16_t text_cursor_y = 0; -static uint16_t text_cursor_x = 0; -static bool wrap = false; - -uint16_t LCDDriver_GetCurrentXOffset(void) -{ - return text_cursor_x; -} - -void LCDDriver_SetCurrentXOffset(uint16_t x) -{ - text_cursor_x = x; -} - -//Text printing functions -void LCDDriver_drawChar(uint16_t x, uint16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size) -{ - if(c < 32) //non-printable - return; - - uint8_t line = 0; - if ((x >= LCD_WIDTH) || // Clip right - (y >= LCD_HEIGHT) || // Clip bottom - ((x + 6 * size - 1) < 0) || // Clip left - ((y + 8 * size - 1) < 0)) // Clip top - return; - - if (!_cp437 && (c >= 176)) - c++; // Handle 'classic' charset behavior - LCDDriver_SetCursorAreaPosition(x, y, x + 6 * size - 1, y + 8 * size - 1); //char area - for (int8_t j = 0; j < 8; j++) - { //y line out - for (int8_t s_y = 0; s_y < size; s_y++) //y size scale - for (int8_t i = 0; i < 6; i++) - { //x line out - { - if (i == 5) - line = 0x0; - else - line = rastr_font[(c * 5) + i]; //read font - line >>= j; - for (int8_t s_x = 0; s_x < size; s_x++) //x size scale - { - if (line & 0x1) - LCDDriver_SendData(color); //font pixel - else - LCDDriver_SendData(bg); //background pixel - } - } - } - } -} - -void LCDDriver_printText(char text[], uint16_t x, uint16_t y, uint16_t color, uint16_t bg, uint8_t size) -{ - uint16_t offset = size * 6; - uint16_t skipped = 0; - for (uint16_t i = 0; i < 128 && text[i] != 0; i++) - { - if (text[i] == '^' && text[i + 1] == 'o') //celsius - { - i++; - skipped++; - LCDDriver_drawChar(x + (offset * (i - skipped)), y - 3, text[i], color, bg, size); - text_cursor_x = x + (offset * (i + 1 - skipped)); - } - else - { - LCDDriver_drawChar(x + (offset * (i - skipped)), y, text[i], color, bg, size); - text_cursor_x = x + (offset * (i + 1 - skipped)); - } - } -} - -void LCDDriver_drawCharFont(uint16_t x, uint16_t y, unsigned char c, uint16_t color, uint16_t bg, const GFXfont *gfxFont) -{ - c -= gfxFont->first; - GFXglyph *glyph = (GFXglyph *)&gfxFont->glyph[c]; - - uint16_t bo = glyph->bitmapOffset; - uint8_t bits = 0; - uint8_t bit = 0; - int16_t ys1 = y + glyph->yOffset; - int16_t ys2 = y + glyph->yOffset + glyph->height - 1; - if (ys1 < 0) - ys1 = 0; - if (ys2 < 0) - ys2 = 0; - LCDDriver_SetCursorAreaPosition(x, (uint16_t)ys1, x + glyph->xAdvance - 1, (uint16_t)ys2); //char area - - for (uint8_t yy = 0; yy < glyph->height; yy++) - { - for (uint8_t xx = 0; xx < glyph->xAdvance; xx++) - { - if (xx < glyph->xOffset || xx >= (glyph->xOffset + glyph->width)) - { - LCDDriver_SendData(bg); //background pixel - continue; - } - if (!(bit++ & 7)) - { - bits = gfxFont->bitmap[bo++]; - } - if (bits & 0x80) - { - LCDDriver_SendData(color); //font pixel - } - else - { - LCDDriver_SendData(bg); //background pixel - } - bits <<= 1; - } - } -} - -void LCDDriver_printTextFont(char text[], uint16_t x, uint16_t y, uint16_t color, uint16_t bg, const GFXfont *gfxFont) -{ - uint8_t c = 0; - text_cursor_x = x; - text_cursor_y = y; - for (uint16_t i = 0; i < 256 && text[i] != NULL; i++) - { - c = text[i]; - if (c == '\n') - { - text_cursor_x = 0; - text_cursor_y += gfxFont->yAdvance; - } - else if (c != '\r') - { - if ((c >= gfxFont->first) && (c <= gfxFont->last)) - { - GFXglyph *glyph = (GFXglyph *)&gfxFont->glyph[c - gfxFont->first]; - if ((glyph->width > 0) && (glyph->height > 0)) - { - if (wrap && ((text_cursor_x + (glyph->xOffset + glyph->width)) > LCD_WIDTH)) - { - text_cursor_x = 0; - text_cursor_y += gfxFont->yAdvance; - } - LCDDriver_drawCharFont(text_cursor_x, text_cursor_y, c, color, bg, gfxFont); - } - text_cursor_x += glyph->xAdvance; - } - } - } -} - -/**************************************************************************/ -/*! - @brief Helper to determine size of a character with current font/size. - Broke this out as it's used by both the PROGMEM- and RAM-resident getTextBounds() functions. - @param c The ascii character in question - @param x Pointer to x location of character - @param y Pointer to y location of character - @param minx Minimum clipping value for X - @param miny Minimum clipping value for Y - @param maxx Maximum clipping value for X - @param maxy Maximum clipping value for Y -*/ -/**************************************************************************/ -static void LCDDriver_charBounds(char c, uint16_t *x, uint16_t *y, int16_t *minx, int16_t *miny, int16_t *maxx, int16_t *maxy, const GFXfont *gfxFont) -{ - if (c == '\n') - { // Newline? - *x = 0; // Reset x to zero, advance y by one line - *y += gfxFont->yAdvance; - } - else if (c != '\r') - { - if ((c >= gfxFont->first) && (c <= gfxFont->last)) - { // Char present in this font? - GFXglyph *glyph = (GFXglyph *)&gfxFont->glyph[c - gfxFont->first]; - if (wrap && ((*x + (((int16_t)glyph->xOffset + glyph->width))) > LCD_WIDTH)) - { - *x = 0; // Reset x to zero, advance y by one line - *y += gfxFont->yAdvance; - } - int16_t x1 = *x + glyph->xOffset, - y1 = *y + glyph->yOffset, - x2 = x1 + glyph->width - 1, - y2 = y1 + glyph->height - 1; - if (x1 < *minx) - *minx = x1; - if (y1 < *miny) - *miny = y1; - if (x2 > *maxx) - *maxx = x2; - if (y2 > *maxy) - *maxy = y2; - *x += glyph->xAdvance; - } - } -} - -/**************************************************************************/ -/*! - @brief Helper to determine size of a string with current font/size. Pass string and a cursor position, returns UL corner and W,H. - @param str The ascii string to measure - @param x The current cursor X - @param y The current cursor Y - @param x1 The boundary X coordinate, set by function - @param y1 The boundary Y coordinate, set by function - @param w The boundary width, set by function - @param h The boundary height, set by function -*/ -/**************************************************************************/ -void LCDDriver_getTextBounds(char text[], uint16_t x, uint16_t y, uint16_t *x1, uint16_t *y1, uint16_t *w, uint16_t *h, const GFXfont *gfxFont) -{ - uint8_t c; // Current character - - *x1 = x; - *y1 = y; - *w = *h = 0; - - int16_t minx = LCD_WIDTH, miny = LCD_HEIGHT, maxx = 0, maxy = 0; - - for (uint16_t i = 0; i < 40 && text[i] != NULL; i++) - { - c = text[i]; - LCDDriver_charBounds(c, &x, &y, &minx, &miny, &maxx, &maxy, gfxFont); - } - - if (maxx >= minx) - { - *x1 = (uint16_t)minx; - *w = (uint16_t)(maxx - minx + 1); - } - if (maxy >= miny) - { - *y1 = (uint16_t)miny; - *h = (uint16_t)(maxy - miny + 1); - } -} - -//Image print (RGB 565, 2 bytes per pixel) -void LCDDriver_printImage(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint8_t *data) -{ - uint32_t n = w * h * 2; - LCDDriver_SetCursorAreaPosition(x, y, w + x - 1, h + y - 1); - for (uint32_t i = 0; i < n; i += 2) - { - LCDDriver_SendData((uint16_t)((data[i] << 8) | data[i + 1])); - } -} - -void LCDDriver_printImage_RLECompressed(uint16_t x, uint16_t y, const tIMAGE *image, uint16_t transparent_color, uint16_t bg_color) -{ - uint32_t pixels = image->width * image->height; - uint32_t i = 0; - uint32_t decoded = 0; - - LCDDriver_SetCursorAreaPosition(x, y, image->width + x - 1, image->height + y - 1); - while (true) - { - if ((int16_t)image->data[i] < 0) // no repeats - { - uint16_t count = (-(int16_t)image->data[i]); - i++; - for (uint16_t p = 0; p < count; p++) - { - if(image->data[i] == transparent_color) - LCDDriver_SendData(bg_color); - else - LCDDriver_SendData(image->data[i]); - decoded++; - i++; - if (pixels <= decoded) - return; - } - } - else //repeats - { - uint16_t count = ((int16_t)image->data[i]); - i++; - for (uint16_t p = 0; p < count; p++) - { - if(image->data[i] == transparent_color) - LCDDriver_SendData(bg_color); - else - LCDDriver_SendData(image->data[i]); - decoded++; - if (pixels <= decoded) - return; - } - i++; - } - } -} - -static uint32_t RLEStream_pixels = 0; -static uint32_t RLEStream_decoded = 0; -static uint8_t RLEStream_state = 0; -void LCDDriver_printImage_RLECompressed_StartStream(uint16_t x, uint16_t y, uint16_t width, uint16_t height) -{ - RLEStream_pixels = width * height; - RLEStream_decoded = 0; - RLEStream_state = 0; - - LCDDriver_SetCursorAreaPosition(x, y, width + x - 1, height + y - 1); -} - -void LCDDriver_printImage_RLECompressed_ContinueStream(int16_t *data, uint16_t len) -{ - static uint16_t nr_count = 0; - static uint16_t nr_count_p = 0; - static uint16_t r_count = 0; - static uint16_t r_count_p = 0; - uint32_t processed = 0; - while (processed < len) - { - if ((((int16_t)data[processed] < 0) && (RLEStream_state == 0)) || (RLEStream_state == 1)) // no repeats - { - if(RLEStream_state == 0) - { - nr_count = (-(int16_t)data[processed]); - nr_count_p = 0; - processed++; - } - RLEStream_state = 1; - - if(processed >= len) - return; - - for (; nr_count_p < nr_count;) - { - LCDDriver_SendData(data[processed]); - RLEStream_decoded++; - nr_count_p++; - processed++; - if (RLEStream_pixels <= RLEStream_decoded) - return; - if(processed >= len && nr_count_p < nr_count) - return; - } - RLEStream_state = 0; - } - else if ((((int16_t)data[processed] > 0) && (RLEStream_state == 0)) || (RLEStream_state == 2)) //repeats - { - if(RLEStream_state == 0) - { - r_count = ((int16_t)data[processed]); - r_count_p = 0; - processed++; - } - RLEStream_state = 2; - - if(processed >= len) - return; - - for (; r_count_p < r_count;) - { - LCDDriver_SendData(data[processed]); - r_count_p++; - RLEStream_decoded++; - if (RLEStream_pixels <= RLEStream_decoded) - return; - } - processed++; - RLEStream_state = 0; - } - else - processed++; - } -} - -inline uint16_t addColor(uint16_t color, uint8_t add_r, uint8_t add_g, uint8_t add_b) -{ - uint8_t r = ((color >> 11) & 0x1F) + add_r; - uint8_t g = ((color >> 5) & 0x3F) + (uint8_t)(add_g << 1); - uint8_t b = ((color >> 0) & 0x1F) + add_b; - if (r > 31) - r = 31; - if (g > 63) - g = 63; - if (b > 31) - b = 31; - return (uint16_t)((r << 11) | (g << 5) | b); -} - -inline uint16_t mixColors(uint16_t color1, uint16_t color2, float32_t opacity) -{ - uint8_t r = (uint8_t)((float32_t)((color1 >> 11) & 0x1F) * (1.0f - opacity) + (float32_t)((color2 >> 11) & 0x1F) * opacity); - uint8_t g = (uint8_t)((float32_t)((color1 >> 5) & 0x3F) * (1.0f - opacity) + (float32_t)((color2 >> 5) & 0x3F) * opacity); - uint8_t b = (uint8_t)((float32_t)((color1 >> 0) & 0x1F) * (1.0f - opacity) + (float32_t)((color2 >> 0) & 0x1F) * opacity); - if (r > 31) - r = 31; - if (g > 63) - g = 63; - if (b > 31) - b = 31; - return (uint16_t)(r << 11) | (uint16_t)(g << 5) | (uint16_t)b; -} diff --git a/Src/lcd_driver.h b/Src/lcd_driver.h deleted file mode 100644 index 91c0546..0000000 --- a/Src/lcd_driver.h +++ /dev/null @@ -1,107 +0,0 @@ -#ifndef _LCDDRIVER_H_ -#define _LCDDRIVER_H_ - -//List of includes -#include "settings.h" -#include -#include "stm32f4xx_hal.h" -#include -#include -#include "images.h" - -#define LCD_FSMC_COMM_ADDR 0x60000000 -#define LCD_FSMC_DATA_ADDR 0x60080000 - -//LCD dimensions defines -#if (defined(LCD_ILI9481) || defined(LCD_HX8357B) || defined(LCD_HX8357C) || defined(LCD_ILI9486) || defined (LCD_SSD1963) || defined(LCD_R61581)) - #include "lcd_driver_ILI9481.h" -#endif - -#if (LCD_WIDTH == 480 && LCD_HEIGHT == 320) - #define LAY_480x320 -#endif -#define LCD_PIXEL_COUNT (LCD_WIDTH * LCD_HEIGHT) - -//List of colors -#define COLOR_BLACK 0x0000 -#define COLOR_NAVY 0x000F -#define COLOR_DGREEN 0x03E0 -#define COLOR_DCYAN 0x03EF -#define COLOR_MAROON 0x7800 -#define COLOR_PURPLE 0x780F -#define COLOR_OLIVE 0x7BE0 -#define COLOR_LGRAY 0xC618 -#define COLOR_DGRAY 0x7BEF -#define COLOR_BLUE 0x001F -#define COLOR_BLUE2 0x051D -#define COLOR_GREEN 0x07E0 -#define COLOR_GREEN2 0xB723 -#define COLOR_GREEN3 0x8000 -#define COLOR_CYAN 0x07FF -#define COLOR_RED 0xF800 -#define COLOR_MAGENTA 0xF81F -#define COLOR_YELLOW 0xFFE0 -#define COLOR_WHITE 0xFFFF -#define COLOR_ORANGE 0xFD20 -#define COLOR_GREENYELLOW 0xAFE5 -#define COLOR_BROWN 0XBC40 - -/// Font data stored PER GLYPH -typedef struct -{ - uint16_t bitmapOffset; ///< Pointer into GFXfont->bitmap - uint8_t width; ///< Bitmap dimensions in pixels - uint8_t height; ///< Bitmap dimensions in pixels - uint8_t xAdvance; ///< Distance to advance cursor (x axis) - int8_t xOffset; ///< X dist from cursor pos to UL corner - int8_t yOffset; ///< Y dist from cursor pos to UL corner -} GFXglyph; - -/// Data stored for FONT AS A WHOLE -typedef struct -{ - const uint8_t *bitmap; ///< Glyph bitmaps, concatenated - const GFXglyph *glyph; ///< Glyph array - const uint8_t first; ///< ASCII extents (first char) - const uint8_t last; ///< ASCII extents (last char) - const uint8_t yAdvance; ///< Newline distance (y axis) -} GFXfont; - -//Functions defines Macros -#define uswap(a, b) \ - { \ - uint16_t t = a; \ - a = b; \ - b = t; \ - } -#define rgb888torgb565(r, g, b) ((uint16_t)(((r & 0xF8) << 8) | ((g & 0xFC) << 3) | ((b & 0xFF) >> 3))) - -extern void LCDDriver_SendData(uint16_t data); -extern uint16_t LCDDriver_readReg(uint16_t reg); -extern void LCDDriver_SetCursorAreaPosition(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2); -extern uint16_t LCDDriver_GetCurrentXOffset(void); -extern void LCDDriver_Init(void); -extern void LCDDriver_Fill(uint16_t color); -extern void LCDDriver_Fill_RectXY(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color); -extern void LCDDriver_Fill_RectWH(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t color); -extern void LCDDriver_Fill_Triangle(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color); -extern void LCDDriver_drawPixel(uint16_t x, uint16_t y, uint16_t color); -extern void LCDDriver_drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color); -extern void LCDDriver_drawFastHLine(uint16_t x, uint16_t y, int16_t w, uint16_t color); -extern void LCDDriver_drawFastVLine(uint16_t x, uint16_t y, int16_t h, uint16_t color); -extern void LCDDriver_drawRectXY(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color); -extern void LCDDriver_drawChar(uint16_t x, uint16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size); -extern void LCDDriver_drawCharFont(uint16_t x, uint16_t y, unsigned char c, uint16_t color, uint16_t bg, const GFXfont *gfxFont); -extern void LCDDriver_printText(char text[], uint16_t x, uint16_t y, uint16_t color, uint16_t bg, uint8_t size); -extern void LCDDriver_printTextFont(char text[], uint16_t x, uint16_t y, uint16_t color, uint16_t bg, const GFXfont *gfxFont); -extern void LCDDriver_getTextBounds(char text[], uint16_t x, uint16_t y, uint16_t *x1, uint16_t *y1, uint16_t *w, uint16_t *h, const GFXfont *gfxFont); -extern void LCDDriver_printImage(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint8_t *data); -extern void LCDDriver_printImage_RLECompressed(uint16_t x, uint16_t y, const tIMAGE *image, uint16_t transparent_color, uint16_t bg_color); -extern void LCDDriver_setRotation(uint8_t rotate); -extern void LCDDriver_setBrightness(uint8_t percent); -extern void LCDDriver_printImage_RLECompressed_StartStream(uint16_t x, uint16_t y, uint16_t width, uint16_t height); -extern void LCDDriver_printImage_RLECompressed_ContinueStream(int16_t *data, uint16_t len); -extern uint16_t addColor(uint16_t color, uint8_t add_r, uint8_t add_g, uint8_t add_b); //add opacity or mix colors -extern uint16_t mixColors(uint16_t color1, uint16_t color2, float32_t opacity); //mix two colors with opacity - -#endif diff --git a/Src/lcd_driver_ILI9481.c b/Src/lcd_driver_ILI9481.c deleted file mode 100644 index 17ed31d..0000000 --- a/Src/lcd_driver_ILI9481.c +++ /dev/null @@ -1,724 +0,0 @@ -#include "settings.h" -#if (defined(LCD_ILI9481) || defined(LCD_HX8357B) || defined(LCD_HX8357C) || defined(LCD_ILI9486) || defined(LCD_R61581)) - -//Header files -#include "lcd_driver.h" -#include "main.h" -#include "fonts.h" -#include "functions.h" -#include "lcd_driver_ILI9481.h" - -//***** Functions prototypes *****// -static inline void LCDDriver_SetCursorPosition(uint16_t x, uint16_t y); -inline void LCDDriver_SetCursorAreaPosition(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2); - -//Write command to LCD -inline void LCDDriver_SendCommand(uint16_t com) -{ - *(__IO uint16_t *)((uint32_t)(LCD_FSMC_COMM_ADDR)) = com; -} - -//Write data to LCD -inline void LCDDriver_SendData(uint16_t data) -{ - *(__IO uint16_t *)((uint32_t)(LCD_FSMC_DATA_ADDR)) = data; -} - -//Write pair command-data -inline void LCDDriver_writeReg(uint16_t reg, uint16_t val) { - LCDDriver_SendCommand(reg); - LCDDriver_SendData(val); -} - -//Read command from LCD -inline uint16_t LCDDriver_ReadStatus(void) -{ - return *(__IO uint16_t *)((uint32_t)(LCD_FSMC_COMM_ADDR)); -} -//Read data from LCD -inline uint16_t LCDDriver_ReadData(void) -{ - return *(__IO uint16_t *)((uint32_t)(LCD_FSMC_DATA_ADDR)); -} - - -//Read Register -inline uint16_t LCDDriver_readReg(uint16_t reg) -{ - LCDDriver_SendCommand(reg); - return LCDDriver_ReadData(); -} - -//Initialise function -void LCDDriver_Init(void) -{ -#if (defined(LCD_ILI9481) || defined(LCD_HX8357B)) - #define ILI9481_COMM_DELAY 20 - - LCDDriver_SendCommand(LCD_COMMAND_SOFT_RESET); //0x01 - HAL_Delay(ILI9481_COMM_DELAY); - - LCDDriver_SendCommand(LCD_COMMAND_EXIT_SLEEP_MODE); //0x11 - HAL_Delay(ILI9481_COMM_DELAY); - - LCDDriver_SendCommand(LCD_COMMAND_NORMAL_MODE_ON); //0x13 - - LCDDriver_SendCommand(LCD_COMMAND_POWER_SETTING); //(0xD0); - LCDDriver_SendData(0x07); - LCDDriver_SendData(0x42); - LCDDriver_SendData(0x18); - - LCDDriver_SendCommand(LCD_COMMAND_VCOM); //(0xD1); - LCDDriver_SendData(0x00); - LCDDriver_SendData(0x07); - LCDDriver_SendData(0x10); - - LCDDriver_SendCommand(LCD_COMMAND_NORMAL_PWR_WR); //(0xD2); - LCDDriver_SendData(0x01); - LCDDriver_SendData(0x02); - HAL_Delay(ILI9481_COMM_DELAY); - -#if defined(LCD_HX8357B) - LCDDriver_SendCommand(LCD_COMMAND_PANEL_DRV_CTL); //(0xC0); - LCDDriver_SendData(0x10); - LCDDriver_SendData(0x3B); - LCDDriver_SendData(0x00); - LCDDriver_SendData(0x02); - LCDDriver_SendData(0x11); - HAL_Delay(ILI9481_COMM_DELAY); -#endif - - LCDDriver_SendCommand(LCD_COMMAND_FR_SET); //(0xC5); - LCDDriver_SendData(0x03); - HAL_Delay(ILI9481_COMM_DELAY); - - LCDDriver_SendCommand(LCD_COMMAND_GAMMAWR); //(0xC8); - LCDDriver_SendData(0x00); - LCDDriver_SendData(0x32); - LCDDriver_SendData(0x36); - LCDDriver_SendData(0x45); - LCDDriver_SendData(0x06); - LCDDriver_SendData(0x16); - LCDDriver_SendData(0x37); - LCDDriver_SendData(0x75); - LCDDriver_SendData(0x77); - LCDDriver_SendData(0x54); - LCDDriver_SendData(0x0C); - LCDDriver_SendData(0x00); - HAL_Delay(ILI9481_COMM_DELAY); - - LCDDriver_SendCommand(LCD_COMMAND_MADCTL); //(0x36); - LCDDriver_SendData(LCD_PARAM_MADCTL_BGR); - HAL_Delay(ILI9481_COMM_DELAY); - - LCDDriver_SendCommand(LCD_COMMAND_PIXEL_FORMAT); //(0x3A); - LCDDriver_SendData(0x55); - HAL_Delay(ILI9481_COMM_DELAY); - - LCDDriver_SendCommand(LCD_COMMAND_COLUMN_ADDR); //(0x2A); - LCDDriver_SendData(0x00); - LCDDriver_SendData(0x00); - LCDDriver_SendData(0x01); - LCDDriver_SendData(0x3F); - HAL_Delay(ILI9481_COMM_DELAY); - - LCDDriver_SendCommand(LCD_COMMAND_PAGE_ADDR); //(0x2B); - LCDDriver_SendData(0x00); - LCDDriver_SendData(0x00); - LCDDriver_SendData(0x01); - LCDDriver_SendData(0xDF); - HAL_Delay(ILI9481_COMM_DELAY); - -#if defined(LCD_HX8357B) - LCDDriver_SendCommand(LCD_COMMAND_COLOR_INVERSION_ON); //(0x21); - HAL_Delay(ILI9481_COMM_DELAY); -#endif - - LCDDriver_SendCommand(LCD_COMMAND_IDLE_OFF); //(0x38); - HAL_Delay(ILI9481_COMM_DELAY); - - LCDDriver_SendCommand(LCD_COMMAND_DISPLAY_ON); //(0x29); - HAL_Delay(ILI9481_COMM_DELAY); -#endif - -#if defined(LCD_HX8357C) - LCDDriver_SendCommand(0x11); - HAL_Delay(20); - LCDDriver_SendCommand(0xD0); - LCDDriver_SendData(0x07); - LCDDriver_SendData(0x42); - LCDDriver_SendData(0x18); - - LCDDriver_SendCommand(0xD1); - LCDDriver_SendData(0x00); - LCDDriver_SendData(0x07); - LCDDriver_SendData(0x10); - - LCDDriver_SendCommand(0xD2); - LCDDriver_SendData(0x01); - LCDDriver_SendData(0x02); - - LCDDriver_SendCommand(0xC0); - LCDDriver_SendData(0x10); - LCDDriver_SendData(0x3B); - LCDDriver_SendData(0x00); - LCDDriver_SendData(0x02); - LCDDriver_SendData(0x11); - - LCDDriver_SendCommand(0xC5); - LCDDriver_SendData(0x03); - - LCDDriver_SendCommand(0xC8); - LCDDriver_SendData(0x00); - LCDDriver_SendData(0x32); - LCDDriver_SendData(0x36); - LCDDriver_SendData(0x45); - LCDDriver_SendData(0x06); - LCDDriver_SendData(0x16); - LCDDriver_SendData(0x37); - LCDDriver_SendData(0x75); - LCDDriver_SendData(0x77); - LCDDriver_SendData(0x54); - LCDDriver_SendData(0x0C); - LCDDriver_SendData(0x00); - - LCDDriver_SendCommand(0x36); - LCDDriver_SendData(0x8A); - - LCDDriver_SendCommand(0x35); // Tearing effect on - LCDDriver_SendData(0x00); // Added parameter - - LCDDriver_SendCommand(0x3A); - LCDDriver_SendData(0x55); - - LCDDriver_SendCommand(0x2A); - LCDDriver_SendData(0x00); - LCDDriver_SendData(0x00); - LCDDriver_SendData(0x01); - LCDDriver_SendData(0x3F); - - LCDDriver_SendCommand(0x2B); - LCDDriver_SendData(0x00); - LCDDriver_SendData(0x00); - LCDDriver_SendData(0x01); - LCDDriver_SendData(0xE0); - HAL_Delay(120); - LCDDriver_SendCommand(0x29); -#endif - -#if defined(LCD_ILI9486) - #define ILI9481_COMM_DELAY 100 - - HAL_Delay(ILI9481_COMM_DELAY); - - LCDDriver_SendCommand(0XF1); - LCDDriver_SendData(0x36); - LCDDriver_SendData(0x04); - LCDDriver_SendData(0x00); - LCDDriver_SendData(0x3C); - LCDDriver_SendData(0X0F); - LCDDriver_SendData(0x8F); - - LCDDriver_SendCommand(0XF2); - LCDDriver_SendData(0x18); - LCDDriver_SendData(0xA3); - LCDDriver_SendData(0x12); - LCDDriver_SendData(0x02); - LCDDriver_SendData(0XB2); - LCDDriver_SendData(0x12); - LCDDriver_SendData(0xFF); - LCDDriver_SendData(0x10); - LCDDriver_SendData(0x00); - - LCDDriver_SendCommand(0XF8); - LCDDriver_SendData(0x21); - LCDDriver_SendData(0x04); - - LCDDriver_SendCommand(0XF9); - LCDDriver_SendData(0x00); - LCDDriver_SendData(0x08); - - LCDDriver_SendCommand(0x36); - LCDDriver_SendData(0x08); - - LCDDriver_SendCommand(0xB4); - LCDDriver_SendData(0x00); - - LCDDriver_SendCommand(0xC1); - LCDDriver_SendData(0x47); //0x41 - - LCDDriver_SendCommand(0xC5); - LCDDriver_SendData(0x00); - LCDDriver_SendData(0xAF); //0x91 - LCDDriver_SendData(0x80); - LCDDriver_SendData(0x00); - - LCDDriver_SendCommand(0xE0); - LCDDriver_SendData(0x0F); - LCDDriver_SendData(0x1F); - LCDDriver_SendData(0x1C); - LCDDriver_SendData(0x0C); - LCDDriver_SendData(0x0F); - LCDDriver_SendData(0x08); - LCDDriver_SendData(0x48); - LCDDriver_SendData(0x98); - LCDDriver_SendData(0x37); - LCDDriver_SendData(0x0A); - LCDDriver_SendData(0x13); - LCDDriver_SendData(0x04); - LCDDriver_SendData(0x11); - LCDDriver_SendData(0x0D); - LCDDriver_SendData(0x00); - - LCDDriver_SendCommand(0xE1); - LCDDriver_SendData(0x0F); - LCDDriver_SendData(0x32); - LCDDriver_SendData(0x2E); - LCDDriver_SendData(0x0B); - LCDDriver_SendData(0x0D); - LCDDriver_SendData(0x05); - LCDDriver_SendData(0x47); - LCDDriver_SendData(0x75); - LCDDriver_SendData(0x37); - LCDDriver_SendData(0x06); - LCDDriver_SendData(0x10); - LCDDriver_SendData(0x03); - LCDDriver_SendData(0x24); - LCDDriver_SendData(0x20); - LCDDriver_SendData(0x00); - - LCDDriver_SendCommand(0x3A); - LCDDriver_SendData(0x55); - - LCDDriver_SendCommand(0x11); - - LCDDriver_SendCommand(0x36); - - LCDDriver_SendData(0x28); - HAL_Delay(ILI9481_COMM_DELAY); - - LCDDriver_SendCommand(0x29); -#endif - -#if defined(LCD_R61581) - LCDDriver_SendCommand(0xB0); - LCDDriver_SendData(0x1E); - - LCDDriver_SendCommand(0xB0); - LCDDriver_SendData(0x00); - - LCDDriver_SendCommand(0xB3); - LCDDriver_SendData(0x02); - LCDDriver_SendData(0x00); - LCDDriver_SendData(0x00); - LCDDriver_SendData(0x10); - - LCDDriver_SendCommand(0xB4); - LCDDriver_SendData(0x00);//0X10 - -// LCDDriver_SendCommand(0xB9); //PWM Settings for Brightness Control -// LCDDriver_SendData(0x01);// Disabled by default. -// LCDDriver_SendData(0xFF); //0xFF = Max brightness -// LCDDriver_SendData(0xFF); -// LCDDriver_SendData(0x18); - - LCDDriver_SendCommand(0xC0); - LCDDriver_SendData(0x03); - LCDDriver_SendData(0x3B);// - LCDDriver_SendData(0x00); - LCDDriver_SendData(0x00); - LCDDriver_SendData(0x00); - LCDDriver_SendData(0x01); - LCDDriver_SendData(0x00);//NW - LCDDriver_SendData(0x43); - - LCDDriver_SendCommand(0xC1); - LCDDriver_SendData(0x08); - LCDDriver_SendData(0x15);//CLOCK - LCDDriver_SendData(0x08); - LCDDriver_SendData(0x08); - - LCDDriver_SendCommand(0xC4); - LCDDriver_SendData(0x15); - LCDDriver_SendData(0x03); - LCDDriver_SendData(0x03); - LCDDriver_SendData(0x01); - - LCDDriver_SendCommand(0xC6); - LCDDriver_SendData(0x02); - - LCDDriver_SendCommand(0xC8); - LCDDriver_SendData(0x0c); - LCDDriver_SendData(0x05); - LCDDriver_SendData(0x0A);//0X12 - LCDDriver_SendData(0x6B);//0x7D - LCDDriver_SendData(0x04); - LCDDriver_SendData(0x06);//0x08 - LCDDriver_SendData(0x15);//0x0A - LCDDriver_SendData(0x10); - LCDDriver_SendData(0x00); - LCDDriver_SendData(0x60);//0x23 - - LCDDriver_SendCommand(0x36); - LCDDriver_SendData(0x0A); - - LCDDriver_SendCommand(0x0C); - LCDDriver_SendData(0x55); - - LCDDriver_SendCommand(0x3A); - LCDDriver_SendData(0x55); - - LCDDriver_SendCommand(0x38); - - LCDDriver_SendCommand(0xD0); - LCDDriver_SendData(0x07); - LCDDriver_SendData(0x07);//VCI1 - LCDDriver_SendData(0x14);//VRH 0x1D - LCDDriver_SendData(0xA2);//BT 0x06 - - LCDDriver_SendCommand(0xD1); - LCDDriver_SendData(0x03); - LCDDriver_SendData(0x5A);//VCM 0x5A - LCDDriver_SendData(0x10);//VDV - - LCDDriver_SendCommand(0xD2); - LCDDriver_SendData(0x03); - LCDDriver_SendData(0x04);//0x24 - LCDDriver_SendData(0x04); - - LCDDriver_SendCommand(0x11); - HAL_Delay(150); - - LCDDriver_SendCommand(0x2A); - LCDDriver_SendData(0x00); - LCDDriver_SendData(0x00); - LCDDriver_SendData(0x01); - LCDDriver_SendData(0xDF);//320 - - LCDDriver_SendCommand(0x2B); - LCDDriver_SendData(0x00); - LCDDriver_SendData(0x00); - LCDDriver_SendData(0x01); - LCDDriver_SendData(0x3F);//480 - - - HAL_Delay(100); - - LCDDriver_SendCommand(0x29); - HAL_Delay(30); - - LCDDriver_SendCommand(0x2C); - HAL_Delay(30); -#endif -} - -//Set screen rotation -void LCDDriver_setRotation(uint8_t rotate) -{ - #if defined(LCD_ILI9481) || defined(LCD_HX8357B) || defined(LCD_ILI9486) - LCDDriver_SendCommand(LCD_COMMAND_MADCTL); - switch (rotate) - { - case 1: // Portrait - LCDDriver_SendData(LCD_PARAM_MADCTL_BGR | LCD_PARAM_MADCTL_MX); - break; - case 2: // Landscape (Portrait + 90) - LCDDriver_SendData(LCD_PARAM_MADCTL_BGR | LCD_PARAM_MADCTL_MV); - break; - case 3: // Inverter portrait - LCDDriver_SendData(LCD_PARAM_MADCTL_BGR | LCD_PARAM_MADCTL_MY); - break; - case 4: // Inverted landscape - LCDDriver_SendData(LCD_PARAM_MADCTL_BGR | LCD_PARAM_MADCTL_MV | LCD_PARAM_MADCTL_MX | LCD_PARAM_MADCTL_MY); - //LCDDriver_SendData(LCD_PARAM_MADCTL_BGR | LCD_PARAM_MADCTL_MV | LCD_PARAM_MADCTL_SS | LCD_PARAM_MADCTL_GS); - break; - } - HAL_Delay(120); - #endif - #if defined(LCD_HX8357C) - LCDDriver_SendCommand(LCD_COMMAND_MADCTL); - switch (rotate) - { - case 1: // Portrait - LCDDriver_SendData(LCD_PARAM_MADCTL_BGR | LCD_PARAM_MADCTL_MX); - break; - case 2: // Landscape (Portrait + 90) - LCDDriver_SendData(LCD_PARAM_MADCTL_BGR | LCD_PARAM_MADCTL_MV); - break; - case 3: // Inverter portrait - LCDDriver_SendData(LCD_PARAM_MADCTL_BGR | LCD_PARAM_MADCTL_MY); - break; - case 4: // Inverted landscape - LCDDriver_SendData(LCD_PARAM_MADCTL_BGR | LCD_PARAM_MADCTL_MV | LCD_PARAM_MADCTL_GS | LCD_PARAM_MADCTL_ML | LCD_PARAM_MADCTL_SS); - break; - } - HAL_Delay(120); - #endif -} - -//Set cursor position -inline void LCDDriver_SetCursorAreaPosition(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) -{ - LCDDriver_SendCommand(LCD_COMMAND_COLUMN_ADDR); - LCDDriver_SendData(x1 >> 8); - LCDDriver_SendData(x1 & 0xFF); - LCDDriver_SendData(x2 >> 8); - LCDDriver_SendData(x2 & 0xFF); - LCDDriver_SendCommand(LCD_COMMAND_PAGE_ADDR); - LCDDriver_SendData(y1 >> 8); - LCDDriver_SendData(y1 & 0xFF); - LCDDriver_SendData(y2 >> 8); - LCDDriver_SendData(y2 & 0xFF); - LCDDriver_SendCommand(LCD_COMMAND_GRAM); -} - -static inline void LCDDriver_SetCursorPosition(uint16_t x, uint16_t y) -{ - LCDDriver_SendCommand(LCD_COMMAND_COLUMN_ADDR); - LCDDriver_SendData(x >> 8); //-V760 - LCDDriver_SendData(x & 0xFF); - LCDDriver_SendData(x >> 8); - LCDDriver_SendData(x & 0xFF); - LCDDriver_SendCommand(LCD_COMMAND_PAGE_ADDR); - LCDDriver_SendData(y >> 8); //-V760 - LCDDriver_SendData(y & 0xFF); - LCDDriver_SendData(y >> 8); - LCDDriver_SendData(y & 0xFF); - LCDDriver_SendCommand(LCD_COMMAND_GRAM); -} - -//Write data to a single pixel -void LCDDriver_drawPixel(uint16_t x, uint16_t y, uint16_t color) -{ - LCDDriver_SetCursorPosition(x, y); - LCDDriver_SendData(color); -} - -//Fill the entire screen with a background color -void LCDDriver_Fill(uint16_t color) -{ - LCDDriver_Fill_RectXY(0, 0, LCD_WIDTH, LCD_HEIGHT, color); -} - -//Rectangle drawing functions -IRAM1 static uint16_t fillxy_color = 0; -void LCDDriver_Fill_RectXY(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color) -{ - if (x1 > (LCD_WIDTH - 1)) - x1 = LCD_WIDTH - 1; - if (y1 > (LCD_HEIGHT - 1)) - y1 = LCD_HEIGHT - 1; - uint32_t n = ((x1 + 1) - x0) * ((y1 + 1) - y0); - if (n > LCD_PIXEL_COUNT) - n = LCD_PIXEL_COUNT; - LCDDriver_SetCursorAreaPosition(x0, y0, x1, y1); - fillxy_color = color; - - if (n > 50) - { - const uint32_t part_size = 30000; - uint32_t estamated = n; - while (estamated > 0) - { - if (estamated >= part_size) - { - HAL_DMA_Start(&hdma_memtomem_dma2_stream3, (uint32_t)&fillxy_color, LCD_FSMC_DATA_ADDR, part_size); - HAL_DMA_PollForTransfer(&hdma_memtomem_dma2_stream3, HAL_DMA_FULL_TRANSFER, HAL_MAX_DELAY); - estamated -= part_size; - } - else - { - HAL_DMA_Start(&hdma_memtomem_dma2_stream3, (uint32_t)&fillxy_color, LCD_FSMC_DATA_ADDR, estamated); - HAL_DMA_PollForTransfer(&hdma_memtomem_dma2_stream3, HAL_DMA_FULL_TRANSFER, HAL_MAX_DELAY); - estamated = 0; - } - } - } - else - { - while (n--) - { - LCDDriver_SendData(color); - } - } -} - -void LCDDriver_Fill_RectWH(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t color) -{ - LCDDriver_Fill_RectXY(x, y, x + w, y + h, color); -} - -//Line drawing functions -void LCDDriver_drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color) -{ - int16_t steep = abs(y1 - y0) > abs(x1 - x0); - if (steep) - { - uswap(x0, y0) - uswap(x1, y1) - } - - if (x0 > x1) - { - uswap(x0, x1) - uswap(y0, y1) - } - - int16_t dx, dy; - dx = (int16_t)(x1 - x0); - dy = (int16_t)abs(y1 - y0); - - int16_t err = dx / 2; - int16_t ystep; - - if (y0 < y1) - { - ystep = 1; - } - else - { - ystep = -1; - } - - for (; x0 <= x1; x0++) - { - if (steep) - { - LCDDriver_drawPixel(y0, x0, color); - } - else - { - LCDDriver_drawPixel(x0, y0, color); - } - err -= dy; - if (err < 0) - { - y0 += ystep; - err += dx; - } - } -} - -void LCDDriver_drawFastHLine(uint16_t x, uint16_t y, int16_t w, uint16_t color) -{ - int16_t x2 = x + w; - if (x2 < 0) - x2 = 0; - if (x2 > (LCD_WIDTH - 1)) - x2 = LCD_WIDTH - 1; - - if (x2 < x) - LCDDriver_Fill_RectXY((uint16_t)x2, y, x, y, color); - else - LCDDriver_Fill_RectXY(x, y, (uint16_t)x2, y, color); -} - -void LCDDriver_drawFastVLine(uint16_t x, uint16_t y, int16_t h, uint16_t color) -{ - int16_t y2 = y + h - 1; - if (y2 < 0) - y2 = 0; - if (y2 > (LCD_HEIGHT - 1)) - y2 = LCD_HEIGHT - 1; - - if (y2 < y) - LCDDriver_Fill_RectXY(x, (uint16_t)y2, x, y, color); - else - LCDDriver_Fill_RectXY(x, y, x, (uint16_t)y2, color); -} - -void LCDDriver_drawRectXY(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color) -{ - LCDDriver_drawFastHLine(x0, y0, (int16_t)(x1 - x0), color); - LCDDriver_drawFastHLine(x0, y1, (int16_t)(x1 - x0), color); - LCDDriver_drawFastVLine(x0, y0, (int16_t)(y1 - y0), color); - LCDDriver_drawFastVLine(x1, y0, (int16_t)(y1 - y0), color); -} - -void LCDDriver_Fill_Triangle(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color) -{ - int16_t a, b, y, last; - - // Sort coordinates by Y order (y2 >= y1 >= y0) - if (y0 > y1) - { - _swap_int16_t(y0, y1) - _swap_int16_t(x0, x1) - } - if (y1 > y2) - { - _swap_int16_t(y2, y1) - _swap_int16_t(x2, x1) - } - if (y0 > y1) - { - _swap_int16_t(y0, y1) - _swap_int16_t(x0, x1) - } - - if (y0 == y2) - { // Handle awkward all-on-same-line case as its own thing - a = b = x0; - if (x1 < a) - a = x1; - else if (x1 > b) - b = x1; - if (x2 < a) - a = x2; - else if (x2 > b) - b = x2; - LCDDriver_drawFastHLine(a, y0, b - a + 1, color); - return; - } - - int16_t dx01 = x1 - x0, dy01 = y1 - y0, dx02 = x2 - x0, dy02 = y2 - y0, - dx12 = x2 - x1, dy12 = y2 - y1; - int32_t sa = 0, sb = 0; - - // For upper part of triangle, find scanline crossings for segments - // 0-1 and 0-2. If y1=y2 (flat-bottomed triangle), the scanline y1 - // is included here (and second loop will be skipped, avoiding a /0 - // error there), otherwise scanline y1 is skipped here and handled - // in the second loop...which also avoids a /0 error here if y0=y1 - // (flat-topped triangle). - if (y1 == y2) - last = y1; // Include y1 scanline - else - last = y1 - 1; // Skip it - - for (y = y0; y <= last; y++) - { - a = x0 + sa / dy01; - b = x0 + sb / dy02; - sa += dx01; - sb += dx02; - /* longhand: - a = x0 + (x1 - x0) * (y - y0) / (y1 - y0); - b = x0 + (x2 - x0) * (y - y0) / (y2 - y0); - */ - if (a > b) - _swap_int16_t(a, b) - LCDDriver_drawFastHLine(a, y, b - a + 1, color); - } - - // For lower part of triangle, find scanline crossings for segments - // 0-2 and 1-2. This loop is skipped if y1=y2. - sa = (int32_t)dx12 * (y - y1); - sb = (int32_t)dx02 * (y - y0); - for (; y <= y2; y++) - { - a = x1 + sa / dy12; - b = x0 + sb / dy02; - sa += dx12; - sb += dx02; - /* longhand: - a = x1 + (x2 - x1) * (y - y1) / (y2 - y1); - b = x0 + (x2 - x0) * (y - y0) / (y2 - y0); - */ - if (a > b) - _swap_int16_t(a, b) - LCDDriver_drawFastHLine(a, y, b - a + 1, color); - } -} - -#endif diff --git a/Src/lcd_driver_ILI9481.h b/Src/lcd_driver_ILI9481.h deleted file mode 100644 index 88878a5..0000000 --- a/Src/lcd_driver_ILI9481.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef _LCDDRIVER_ILI9481_H_ -#include "settings.h" -#if (defined(LCD_ILI9481) || defined(LCD_HX8357B) || defined(LCD_HX8357C) || defined(LCD_ILI9486) || defined(LCD_R61581)) -#define _LCDDRIVER_ILI9481_H_ - -//LCD dimensions defines -#define LCD_WIDTH 480 -#define LCD_HEIGHT 320 - -//ILI9481 LCD commands -#define LCD_COMMAND_COLUMN_ADDR 0x2A -#define LCD_COMMAND_PAGE_ADDR 0x2B -#define LCD_COMMAND_GRAM 0x2C -#define LCD_COMMAND_SOFT_RESET 0x01 -#define LCD_COMMAND_NORMAL_MODE_ON 0x13 -#define LCD_COMMAND_VCOM 0xD1 -#define LCD_COMMAND_NORMAL_PWR_WR 0xD2 -#define LCD_COMMAND_PANEL_DRV_CTL 0xC0 -#define LCD_COMMAND_FR_SET 0xC5 -#define LCD_COMMAND_GAMMAWR 0xC8 -#define LCD_COMMAND_PIXEL_FORMAT 0x3A -#define LCD_COMMAND_DISPLAY_ON 0x29 -#define LCD_COMMAND_EXIT_SLEEP_MODE 0x11 -#define LCD_COMMAND_POWER_SETTING 0xD0 -#define LCD_COMMAND_COLOR_INVERSION_OFF 0x20 -#define LCD_COMMAND_COLOR_INVERSION_ON 0x21 -#define LCD_COMMAND_TEARING_OFF 0x34 -#define LCD_COMMAND_TEARING_ON 0x35 -#define LCD_COMMAND_MADCTL 0x36 -#define LCD_COMMAND_IDLE_OFF 0x38 -#define LCD_COMMAND_TIMING_NORMAL 0xC1 -#define LCD_PARAM_MADCTL_MY 0x80 -#define LCD_PARAM_MADCTL_MX 0x40 -#define LCD_PARAM_MADCTL_MV 0x20 -#define LCD_PARAM_MADCTL_ML 0x10 -#define LCD_PARAM_MADCTL_RGB 0x00 -#define LCD_PARAM_MADCTL_BGR 0x08 -#define LCD_PARAM_MADCTL_SS 0x02 -#define LCD_PARAM_MADCTL_GS 0x01 - -#ifndef _swap_int16_t -#define _swap_int16_t(a, b) \ - { \ - int16_t t = a; \ - a = b; \ - b = t; \ - } -#endif - -#endif -#endif diff --git a/Src/main.c b/Src/main.c deleted file mode 100644 index fc25d10..0000000 --- a/Src/main.c +++ /dev/null @@ -1,1334 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file : main.c - * @brief : Main program body - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2020 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include "lcd_driver.h" -#include "functions.h" -#include "bootloader.h" -#include "trx_manager.h" -#include "lcd.h" -#include "front_unit.h" -#include "rf_unit.h" -#include "fpga.h" -#include "fft.h" -#include "wm8731.h" -#include "audio_processor.h" -#include "settings.h" -#include "profiler.h" -#include "usb_device.h" -#include "usbd_cat_if.h" -#include "usbd_debug_if.h" -#include "images.h" -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ - -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ - -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -ADC_HandleTypeDef hadc1; -ADC_HandleTypeDef hadc2; - -I2S_HandleTypeDef hi2s3; -DMA_HandleTypeDef hdma_spi3_tx; -DMA_HandleTypeDef hdma_i2s3_ext_rx; - -RTC_HandleTypeDef hrtc; - -SPI_HandleTypeDef hspi2; - -TIM_HandleTypeDef htim3; -TIM_HandleTypeDef htim4; -TIM_HandleTypeDef htim5; -TIM_HandleTypeDef htim6; -TIM_HandleTypeDef htim7; -TIM_HandleTypeDef htim8; - -PCD_HandleTypeDef hpcd_USB_OTG_FS; - -DMA_HandleTypeDef hdma_memtomem_dma2_stream7; -DMA_HandleTypeDef hdma_memtomem_dma2_stream6; -DMA_HandleTypeDef hdma_memtomem_dma2_stream4; -DMA_HandleTypeDef hdma_memtomem_dma2_stream1; -DMA_HandleTypeDef hdma_memtomem_dma2_stream0; -DMA_HandleTypeDef hdma_memtomem_dma2_stream2; -DMA_HandleTypeDef hdma_memtomem_dma2_stream3; -DMA_HandleTypeDef hdma_memtomem_dma2_stream5; -SRAM_HandleTypeDef hsram1; - -/* USER CODE BEGIN PV */ -static char greetings_buff[32] = {0}; -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_DMA_Init(void); -static void MX_USB_OTG_FS_PCD_Init(void); -static void MX_I2S3_Init(void); -static void MX_RTC_Init(void); -static void MX_ADC1_Init(void); -static void MX_ADC2_Init(void); -static void MX_FSMC_Init(void); -static void MX_SPI2_Init(void); -static void MX_TIM3_Init(void); -static void MX_TIM4_Init(void); -static void MX_TIM5_Init(void); -static void MX_TIM6_Init(void); -static void MX_TIM7_Init(void); -static void MX_TIM8_Init(void); -/* USER CODE BEGIN PFP */ - -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ - -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - //Enable Memory Protect - //ARM_MPU_Disable(); - //ARM_MPU_SetRegion(ARM_MPU_RBAR(0, 0x20000000), ARM_MPU_RASR(0, ARM_MPU_AP_RO, 0, 0, 0, 0, 0, ARM_MPU_REGION_SIZE_32B) | 0x1 | (ARM_MPU_REGION_SIZE_32B << 1)); //protect stack - //ARM_MPU_SetRegion(ARM_MPU_RBAR(1, 0x20000000+0x1F00+0x2000-32), ARM_MPU_RASR(0, ARM_MPU_AP_RO, 0, 0, 0, 0, 0, ARM_MPU_REGION_SIZE_32B) | 0x1 | (ARM_MPU_REGION_SIZE_32B << 1)); //protect heap - //ARM_MPU_Enable(MPU_CTRL_PRIVDEFENA_Msk); - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_DMA_Init(); - MX_I2S3_Init(); - MX_RTC_Init(); - MX_ADC1_Init(); - MX_ADC2_Init(); - MX_FSMC_Init(); - MX_SPI2_Init(); - MX_TIM3_Init(); - MX_TIM4_Init(); - MX_TIM5_Init(); - MX_TIM6_Init(); - MX_TIM7_Init(); - MX_TIM8_Init(); - /* USER CODE BEGIN 2 */ - - /* BUG FIX: Enabling Audio Clock Input in CubeMX does not set I2SSRC bit - * in RCC_CFGR register! Hence we need to set it manually here! * WARNING: A bug fix is also needed in __HAL_RCC_GET_I2S_SOURCE() - Line 6131 stm32f4xx_hal_rcc_ex.h -> #define __HAL_RCC_GET_I2S_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_I2SSRC)) >> RCC_CFGR_I2SSRC_Pos) - */ - - __HAL_RCC_SYSCFG_CLK_ENABLE(); - HAL_EnableCompensationCell(); - - USBD_Restart(); - HAL_Delay(1000); - sendToDebug_str("\r\n----------------------------------\r\n"); - sendToDebug_strln("Wolf-Lite Transceiver Initialization..."); - InitSettings(); - sendToDebug_strln("[OK] FIFO timer TIM7 init"); - HAL_TIM_Base_Start_IT(&htim7); - sendToDebug_strln("[OK] Real Time Clock init"); - HAL_RTC_Init(&hrtc); - sendToDebug_strln("[OK] Frontpanel init"); - FRONTPANEL_Init(); - sendToDebug_strln("[OK] Settings loading"); - if (PERIPH_FrontPanel_BottomScroll_Buttons_Active[0].state) - LoadSettings(true); //soft reset - else - LoadSettings(false); - sendToDebug_strln("[OK] LCD init"); - LCD_busy = true; - LCD_Init(); - if (SHOW_LOGO) - { - LCDDriver_Fill(rgb888torgb565(243, 243, 243)); - LCDDriver_printImage_RLECompressed(((LCD_WIDTH - IMAGES_logo.width) / 2), ((LCD_HEIGHT - IMAGES_logo.height) / 2), &IMAGES_logo, BG_COLOR, BG_COLOR); - LCDDriver_printText(version_string, 10, (LCD_HEIGHT - 10 - 8), COLOR_RED, rgb888torgb565(243, 243, 243), 1); - //show callsign greetings - uint16_t x1, y1, w, h; - strcat(greetings_buff, "Hello, "); - strcat(greetings_buff, TRX.CALLSIGN); - strcat(greetings_buff, " !"); - LCDDriver_getTextBounds(greetings_buff, LAY_GREETINGS_X, LAY_GREETINGS_Y, &x1, &y1, &w, &h, &FreeSans9pt7b); - LCDDriver_printTextFont(greetings_buff, LAY_GREETINGS_X - (w / 2), LAY_GREETINGS_Y, COLOR->GREETINGS, rgb888torgb565(243, 243, 243), &FreeSans9pt7b); - } - sendToDebug_strln("[OK] Profiler init"); - InitProfiler(); - sendToDebug_strln("[OK] Calibration loading"); - if (PERIPH_FrontPanel_BottomScroll_Buttons_Active[0].state && PERIPH_FrontPanel_BottomScroll_Buttons_Active[1].state) //Very hard reset - LoadCalibration(true); - else - LoadCalibration(false); - - //DEBUG!!! - //CALIBRATE.ENCODER_SLOW_RATE = 1; - //CALIBRATE.ENCODER_DEBOUNCE = 10; - //CALIBRATE.ENCODER_ON_FALLING = true; - //TRX.Debug_Console = true; - //TRX.FRQ_FAST_STEP = 500; - //TRX.FFT_Zoom = 1; - //TRX.Locked = false; - // - - sendToDebug_strln("[OK] FFT/Waterfall & TIM4 init"); - FFT_PreInit(); - FFT_Init(); - HAL_TIM_Base_Start_IT(&htim4); - sendToDebug_strln("[OK] AudioCodec init"); - WM8731_Init(); - sendToDebug_strln("[OK] TRX init"); - TRX_Init(); - sendToDebug_strln("[OK] FPGA init"); - FPGA_Init(); - sendToDebug_strln("[OK] Audioprocessor & TIM5 init"); - initAudioProcessor(); - HAL_TIM_Base_Start_IT(&htim5); - LCD_busy = false; - LCD_redraw(true); - sendToDebug_strln("[OK] Misc timer TIM6 init"); - HAL_TIM_Base_Start_IT(&htim6); - sendToDebug_strln("[OK] CPU Load init"); - CPULOAD_Init(); - TRX_Inited = true; - sendToDebug_strln("[OK] ENC2 timer TIM3 init"); - HAL_TIM_Base_Start_IT(&htim3); - sendToDebug_strln("[OK] PERIPHERAL timer TIM8 init"); - HAL_TIM_Base_Start_IT(&htim8); - sendToDebug_str("UA3REO Transceiver started!\r\n\r\n"); - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - CPULOAD_GoToSleepMode(); - if (TRX_NeedGoToBootloader) - JumpToBootloader(); - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; - - /** Configure the main internal regulator output voltage - */ - __HAL_RCC_PWR_CLK_ENABLE(); - __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE|RCC_OSCILLATORTYPE_LSE; - RCC_OscInitStruct.HSEState = RCC_HSE_ON; - RCC_OscInitStruct.LSEState = RCC_LSE_ON; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; - RCC_OscInitStruct.PLL.PLLM = 8; - RCC_OscInitStruct.PLL.PLLN = 336; - RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; - RCC_OscInitStruct.PLL.PLLQ = 7; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; - RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV4; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) - { - Error_Handler(); - } - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC; - PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief ADC1 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC1_Init(void) -{ - - /* USER CODE BEGIN ADC1_Init 0 */ - - /* USER CODE END ADC1_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - ADC_InjectionConfTypeDef sConfigInjected = {0}; - - /* USER CODE BEGIN ADC1_Init 1 */ - - /* USER CODE END ADC1_Init 1 */ - /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion) - */ - hadc1.Instance = ADC1; - hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; - hadc1.Init.Resolution = ADC_RESOLUTION_12B; - hadc1.Init.ScanConvMode = ENABLE; - hadc1.Init.ContinuousConvMode = ENABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 1; - hadc1.Init.DMAContinuousRequests = DISABLE; - hadc1.Init.EOCSelection = ADC_EOC_SEQ_CONV; - if (HAL_ADC_Init(&hadc1) != HAL_OK) - { - Error_Handler(); - } - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_10; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /** Configures for the selected ADC injected channel its corresponding rank in the sequencer and its sample time - */ - sConfigInjected.InjectedChannel = ADC_CHANNEL_11; - sConfigInjected.InjectedRank = 1; - sConfigInjected.InjectedNbrOfConversion = 4; - sConfigInjected.InjectedSamplingTime = ADC_SAMPLETIME_28CYCLES; - sConfigInjected.ExternalTrigInjecConvEdge = ADC_EXTERNALTRIGINJECCONVEDGE_RISING; - sConfigInjected.ExternalTrigInjecConv = ADC_EXTERNALTRIGINJECCONV_T4_TRGO; - sConfigInjected.AutoInjectedConv = DISABLE; - sConfigInjected.InjectedDiscontinuousConvMode = DISABLE; - sConfigInjected.InjectedOffset = 0; - if (HAL_ADCEx_InjectedConfigChannel(&hadc1, &sConfigInjected) != HAL_OK) - { - Error_Handler(); - } - /** Configures for the selected ADC injected channel its corresponding rank in the sequencer and its sample time - */ - sConfigInjected.InjectedChannel = ADC_CHANNEL_10; - sConfigInjected.InjectedRank = 2; - if (HAL_ADCEx_InjectedConfigChannel(&hadc1, &sConfigInjected) != HAL_OK) - { - Error_Handler(); - } - /** Configures for the selected ADC injected channel its corresponding rank in the sequencer and its sample time - */ - sConfigInjected.InjectedChannel = ADC_CHANNEL_8; - sConfigInjected.InjectedRank = 3; - if (HAL_ADCEx_InjectedConfigChannel(&hadc1, &sConfigInjected) != HAL_OK) - { - Error_Handler(); - } - /** Configures for the selected ADC injected channel its corresponding rank in the sequencer and its sample time - */ - sConfigInjected.InjectedChannel = ADC_CHANNEL_9; - sConfigInjected.InjectedRank = 4; - if (HAL_ADCEx_InjectedConfigChannel(&hadc1, &sConfigInjected) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC1_Init 2 */ - - /* USER CODE END ADC1_Init 2 */ - -} - -/** - * @brief ADC2 Initialization Function - * @param None - * @retval None - */ -static void MX_ADC2_Init(void) -{ - - /* USER CODE BEGIN ADC2_Init 0 */ - - /* USER CODE END ADC2_Init 0 */ - - ADC_ChannelConfTypeDef sConfig = {0}; - ADC_InjectionConfTypeDef sConfigInjected = {0}; - - /* USER CODE BEGIN ADC2_Init 1 */ - - /* USER CODE END ADC2_Init 1 */ - /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion) - */ - hadc2.Instance = ADC2; - hadc2.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; - hadc2.Init.Resolution = ADC_RESOLUTION_12B; - hadc2.Init.ScanConvMode = ENABLE; - hadc2.Init.ContinuousConvMode = ENABLE; - hadc2.Init.DiscontinuousConvMode = DISABLE; - hadc2.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; - hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc2.Init.NbrOfConversion = 1; - hadc2.Init.DMAContinuousRequests = DISABLE; - hadc2.Init.EOCSelection = ADC_EOC_SEQ_CONV; - if (HAL_ADC_Init(&hadc2) != HAL_OK) - { - Error_Handler(); - } - /** Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. - */ - sConfig.Channel = ADC_CHANNEL_14; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES; - if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK) - { - Error_Handler(); - } - /** Configures for the selected ADC injected channel its corresponding rank in the sequencer and its sample time - */ - sConfigInjected.InjectedChannel = ADC_CHANNEL_14; - sConfigInjected.InjectedRank = 1; - sConfigInjected.InjectedNbrOfConversion = 2; - sConfigInjected.InjectedSamplingTime = ADC_SAMPLETIME_28CYCLES; - sConfigInjected.ExternalTrigInjecConvEdge = ADC_EXTERNALTRIGINJECCONVEDGE_RISING; - sConfigInjected.ExternalTrigInjecConv = ADC_EXTERNALTRIGINJECCONV_T4_TRGO; - sConfigInjected.AutoInjectedConv = DISABLE; - sConfigInjected.InjectedDiscontinuousConvMode = DISABLE; - sConfigInjected.InjectedOffset = 0; - if (HAL_ADCEx_InjectedConfigChannel(&hadc2, &sConfigInjected) != HAL_OK) - { - Error_Handler(); - } - /** Configures for the selected ADC injected channel its corresponding rank in the sequencer and its sample time - */ - sConfigInjected.InjectedChannel = ADC_CHANNEL_15; - sConfigInjected.InjectedRank = 2; - if (HAL_ADCEx_InjectedConfigChannel(&hadc2, &sConfigInjected) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN ADC2_Init 2 */ - - /* USER CODE END ADC2_Init 2 */ - -} - -/** - * @brief I2S3 Initialization Function - * @param None - * @retval None - */ -static void MX_I2S3_Init(void) -{ - - /* USER CODE BEGIN I2S3_Init 0 */ - - /* USER CODE END I2S3_Init 0 */ - - /* USER CODE BEGIN I2S3_Init 1 */ - - /* USER CODE END I2S3_Init 1 */ - hi2s3.Instance = SPI3; - hi2s3.Init.Mode = I2S_MODE_MASTER_TX; - hi2s3.Init.Standard = I2S_STANDARD_PHILIPS; - hi2s3.Init.DataFormat = I2S_DATAFORMAT_32B; - hi2s3.Init.MCLKOutput = I2S_MCLKOUTPUT_DISABLE; - hi2s3.Init.AudioFreq = I2S_AUDIOFREQ_48K; - hi2s3.Init.CPOL = I2S_CPOL_LOW; - hi2s3.Init.ClockSource = I2S_CLOCK_EXTERNAL; - hi2s3.Init.FullDuplexMode = I2S_FULLDUPLEXMODE_ENABLE; - if (HAL_I2S_Init(&hi2s3) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN I2S3_Init 2 */ - - /* USER CODE END I2S3_Init 2 */ - -} - -/** - * @brief RTC Initialization Function - * @param None - * @retval None - */ -static void MX_RTC_Init(void) -{ - - /* USER CODE BEGIN RTC_Init 0 */ - - /* USER CODE END RTC_Init 0 */ - - /* USER CODE BEGIN RTC_Init 1 */ - - /* USER CODE END RTC_Init 1 */ - /** Initialize RTC Only - */ - hrtc.Instance = RTC; - hrtc.Init.HourFormat = RTC_HOURFORMAT_24; - hrtc.Init.AsynchPrediv = 127; - hrtc.Init.SynchPrediv = 255; - hrtc.Init.OutPut = RTC_OUTPUT_DISABLE; - hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH; - hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN; - if (HAL_RTC_Init(&hrtc) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN RTC_Init 2 */ - - /* USER CODE END RTC_Init 2 */ - -} - -/** - * @brief SPI2 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI2_Init(void) -{ - - /* USER CODE BEGIN SPI2_Init 0 */ - - /* USER CODE END SPI2_Init 0 */ - - /* USER CODE BEGIN SPI2_Init 1 */ - - /* USER CODE END SPI2_Init 1 */ - /* SPI2 parameter configuration*/ - hspi2.Instance = SPI2; - hspi2.Init.Mode = SPI_MODE_MASTER; - hspi2.Init.Direction = SPI_DIRECTION_2LINES; - hspi2.Init.DataSize = SPI_DATASIZE_8BIT; - hspi2.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi2.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi2.Init.NSS = SPI_NSS_SOFT; - hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16; - hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi2.Init.TIMode = SPI_TIMODE_DISABLE; - hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi2.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi2) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI2_Init 2 */ - - /* USER CODE END SPI2_Init 2 */ - -} - -/** - * @brief TIM3 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM3_Init(void) -{ - - /* USER CODE BEGIN TIM3_Init 0 */ - - /* USER CODE END TIM3_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM3_Init 1 */ - - /* USER CODE END TIM3_Init 1 */ - htim3.Instance = TIM3; - htim3.Init.Prescaler = 419; - htim3.Init.CounterMode = TIM_COUNTERMODE_UP; - htim3.Init.Period = 199; - htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim3) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM3_Init 2 */ - - /* USER CODE END TIM3_Init 2 */ - -} - -/** - * @brief TIM4 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM4_Init(void) -{ - - /* USER CODE BEGIN TIM4_Init 0 */ - - /* USER CODE END TIM4_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM4_Init 1 */ - - /* USER CODE END TIM4_Init 1 */ - htim4.Instance = TIM4; - htim4.Init.Prescaler = 4199; - htim4.Init.CounterMode = TIM_COUNTERMODE_UP; - htim4.Init.Period = 199; - htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim4) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM4_Init 2 */ - - /* USER CODE END TIM4_Init 2 */ - -} - -/** - * @brief TIM5 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM5_Init(void) -{ - - /* USER CODE BEGIN TIM5_Init 0 */ - - /* USER CODE END TIM5_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM5_Init 1 */ - - /* USER CODE END TIM5_Init 1 */ - htim5.Instance = TIM5; - htim5.Init.Prescaler = 41; - htim5.Init.CounterMode = TIM_COUNTERMODE_UP; - htim5.Init.Period = 99; - htim5.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim5.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim5) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim5, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim5, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM5_Init 2 */ - - /* USER CODE END TIM5_Init 2 */ - -} - -/** - * @brief TIM6 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM6_Init(void) -{ - - /* USER CODE BEGIN TIM6_Init 0 */ - - /* USER CODE END TIM6_Init 0 */ - - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM6_Init 1 */ - - /* USER CODE END TIM6_Init 1 */ - htim6.Instance = TIM6; - htim6.Init.Prescaler = 4199; - htim6.Init.CounterMode = TIM_COUNTERMODE_UP; - htim6.Init.Period = 199; - htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim6) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM6_Init 2 */ - - /* USER CODE END TIM6_Init 2 */ - -} - -/** - * @brief TIM7 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM7_Init(void) -{ - - /* USER CODE BEGIN TIM7_Init 0 */ - - /* USER CODE END TIM7_Init 0 */ - - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM7_Init 1 */ - - /* USER CODE END TIM7_Init 1 */ - htim7.Instance = TIM7; - htim7.Init.Prescaler = 419; - htim7.Init.CounterMode = TIM_COUNTERMODE_UP; - htim7.Init.Period = 199; - htim7.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim7) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim7, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM7_Init 2 */ - - /* USER CODE END TIM7_Init 2 */ - -} - -/** - * @brief TIM8 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM8_Init(void) -{ - - /* USER CODE BEGIN TIM8_Init 0 */ - - /* USER CODE END TIM8_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM8_Init 1 */ - - /* USER CODE END TIM8_Init 1 */ - htim8.Instance = TIM8; - htim8.Init.Prescaler = 209; - htim8.Init.CounterMode = TIM_COUNTERMODE_UP; - htim8.Init.Period = 19999; - htim8.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim8.Init.RepetitionCounter = 0; - htim8.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim8) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim8, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim8, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM8_Init 2 */ - - /* USER CODE END TIM8_Init 2 */ - -} - -/** - * @brief USB_OTG_FS Initialization Function - * @param None - * @retval None - */ -static void MX_USB_OTG_FS_PCD_Init(void) -{ - - /* USER CODE BEGIN USB_OTG_FS_Init 0 */ - - /* USER CODE END USB_OTG_FS_Init 0 */ - - /* USER CODE BEGIN USB_OTG_FS_Init 1 */ - - /* USER CODE END USB_OTG_FS_Init 1 */ - hpcd_USB_OTG_FS.Instance = USB_OTG_FS; - hpcd_USB_OTG_FS.Init.dev_endpoints = 4; - hpcd_USB_OTG_FS.Init.speed = PCD_SPEED_FULL; - hpcd_USB_OTG_FS.Init.dma_enable = DISABLE; - hpcd_USB_OTG_FS.Init.phy_itface = PCD_PHY_EMBEDDED; - hpcd_USB_OTG_FS.Init.Sof_enable = ENABLE; - hpcd_USB_OTG_FS.Init.low_power_enable = DISABLE; - hpcd_USB_OTG_FS.Init.lpm_enable = DISABLE; - hpcd_USB_OTG_FS.Init.vbus_sensing_enable = DISABLE; - hpcd_USB_OTG_FS.Init.use_dedicated_ep1 = DISABLE; - if (HAL_PCD_Init(&hpcd_USB_OTG_FS) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN USB_OTG_FS_Init 2 */ - - /* USER CODE END USB_OTG_FS_Init 2 */ - -} - -/** - * Enable DMA controller clock - * Configure DMA for memory to memory transfers - * hdma_memtomem_dma2_stream7 - * hdma_memtomem_dma2_stream6 - * hdma_memtomem_dma2_stream4 - * hdma_memtomem_dma2_stream1 - * hdma_memtomem_dma2_stream0 - * hdma_memtomem_dma2_stream2 - * hdma_memtomem_dma2_stream3 - * hdma_memtomem_dma2_stream5 - */ -static void MX_DMA_Init(void) -{ - - /* DMA controller clock enable */ - __HAL_RCC_DMA1_CLK_ENABLE(); - __HAL_RCC_DMA2_CLK_ENABLE(); - - /* Configure DMA request hdma_memtomem_dma2_stream7 on DMA2_Stream7 */ - hdma_memtomem_dma2_stream7.Instance = DMA2_Stream7; - hdma_memtomem_dma2_stream7.Init.Channel = DMA_CHANNEL_0; - hdma_memtomem_dma2_stream7.Init.Direction = DMA_MEMORY_TO_MEMORY; - hdma_memtomem_dma2_stream7.Init.PeriphInc = DMA_PINC_ENABLE; - hdma_memtomem_dma2_stream7.Init.MemInc = DMA_MINC_ENABLE; - hdma_memtomem_dma2_stream7.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - hdma_memtomem_dma2_stream7.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - hdma_memtomem_dma2_stream7.Init.Mode = DMA_NORMAL; - hdma_memtomem_dma2_stream7.Init.Priority = DMA_PRIORITY_LOW; - hdma_memtomem_dma2_stream7.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - hdma_memtomem_dma2_stream7.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_memtomem_dma2_stream7.Init.MemBurst = DMA_MBURST_INC4; - hdma_memtomem_dma2_stream7.Init.PeriphBurst = DMA_PBURST_INC4; - if (HAL_DMA_Init(&hdma_memtomem_dma2_stream7) != HAL_OK) - { - Error_Handler( ); - } - - /* Configure DMA request hdma_memtomem_dma2_stream6 on DMA2_Stream6 */ - hdma_memtomem_dma2_stream6.Instance = DMA2_Stream6; - hdma_memtomem_dma2_stream6.Init.Channel = DMA_CHANNEL_0; - hdma_memtomem_dma2_stream6.Init.Direction = DMA_MEMORY_TO_MEMORY; - hdma_memtomem_dma2_stream6.Init.PeriphInc = DMA_PINC_ENABLE; - hdma_memtomem_dma2_stream6.Init.MemInc = DMA_MINC_DISABLE; - hdma_memtomem_dma2_stream6.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; - hdma_memtomem_dma2_stream6.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; - hdma_memtomem_dma2_stream6.Init.Mode = DMA_NORMAL; - hdma_memtomem_dma2_stream6.Init.Priority = DMA_PRIORITY_LOW; - hdma_memtomem_dma2_stream6.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - hdma_memtomem_dma2_stream6.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_memtomem_dma2_stream6.Init.MemBurst = DMA_MBURST_INC8; - hdma_memtomem_dma2_stream6.Init.PeriphBurst = DMA_PBURST_INC8; - if (HAL_DMA_Init(&hdma_memtomem_dma2_stream6) != HAL_OK) - { - Error_Handler( ); - } - - /* Configure DMA request hdma_memtomem_dma2_stream4 on DMA2_Stream4 */ - hdma_memtomem_dma2_stream4.Instance = DMA2_Stream4; - hdma_memtomem_dma2_stream4.Init.Channel = DMA_CHANNEL_0; - hdma_memtomem_dma2_stream4.Init.Direction = DMA_MEMORY_TO_MEMORY; - hdma_memtomem_dma2_stream4.Init.PeriphInc = DMA_PINC_ENABLE; - hdma_memtomem_dma2_stream4.Init.MemInc = DMA_MINC_ENABLE; - hdma_memtomem_dma2_stream4.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; - hdma_memtomem_dma2_stream4.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; - hdma_memtomem_dma2_stream4.Init.Mode = DMA_NORMAL; - hdma_memtomem_dma2_stream4.Init.Priority = DMA_PRIORITY_LOW; - hdma_memtomem_dma2_stream4.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - hdma_memtomem_dma2_stream4.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_memtomem_dma2_stream4.Init.MemBurst = DMA_MBURST_INC8; - hdma_memtomem_dma2_stream4.Init.PeriphBurst = DMA_PBURST_INC8; - if (HAL_DMA_Init(&hdma_memtomem_dma2_stream4) != HAL_OK) - { - Error_Handler( ); - } - - /* Configure DMA request hdma_memtomem_dma2_stream1 on DMA2_Stream1 */ - hdma_memtomem_dma2_stream1.Instance = DMA2_Stream1; - hdma_memtomem_dma2_stream1.Init.Channel = DMA_CHANNEL_0; - hdma_memtomem_dma2_stream1.Init.Direction = DMA_MEMORY_TO_MEMORY; - hdma_memtomem_dma2_stream1.Init.PeriphInc = DMA_PINC_ENABLE; - hdma_memtomem_dma2_stream1.Init.MemInc = DMA_MINC_ENABLE; - hdma_memtomem_dma2_stream1.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - hdma_memtomem_dma2_stream1.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - hdma_memtomem_dma2_stream1.Init.Mode = DMA_NORMAL; - hdma_memtomem_dma2_stream1.Init.Priority = DMA_PRIORITY_HIGH; - hdma_memtomem_dma2_stream1.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - hdma_memtomem_dma2_stream1.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_memtomem_dma2_stream1.Init.MemBurst = DMA_MBURST_INC4; - hdma_memtomem_dma2_stream1.Init.PeriphBurst = DMA_PBURST_INC4; - if (HAL_DMA_Init(&hdma_memtomem_dma2_stream1) != HAL_OK) - { - Error_Handler( ); - } - - /* Configure DMA request hdma_memtomem_dma2_stream0 on DMA2_Stream0 */ - hdma_memtomem_dma2_stream0.Instance = DMA2_Stream0; - hdma_memtomem_dma2_stream0.Init.Channel = DMA_CHANNEL_0; - hdma_memtomem_dma2_stream0.Init.Direction = DMA_MEMORY_TO_MEMORY; - hdma_memtomem_dma2_stream0.Init.PeriphInc = DMA_PINC_ENABLE; - hdma_memtomem_dma2_stream0.Init.MemInc = DMA_MINC_ENABLE; - hdma_memtomem_dma2_stream0.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - hdma_memtomem_dma2_stream0.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - hdma_memtomem_dma2_stream0.Init.Mode = DMA_NORMAL; - hdma_memtomem_dma2_stream0.Init.Priority = DMA_PRIORITY_HIGH; - hdma_memtomem_dma2_stream0.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - hdma_memtomem_dma2_stream0.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_memtomem_dma2_stream0.Init.MemBurst = DMA_MBURST_INC4; - hdma_memtomem_dma2_stream0.Init.PeriphBurst = DMA_PBURST_INC4; - if (HAL_DMA_Init(&hdma_memtomem_dma2_stream0) != HAL_OK) - { - Error_Handler( ); - } - - /* Configure DMA request hdma_memtomem_dma2_stream2 on DMA2_Stream2 */ - hdma_memtomem_dma2_stream2.Instance = DMA2_Stream2; - hdma_memtomem_dma2_stream2.Init.Channel = DMA_CHANNEL_0; - hdma_memtomem_dma2_stream2.Init.Direction = DMA_MEMORY_TO_MEMORY; - hdma_memtomem_dma2_stream2.Init.PeriphInc = DMA_PINC_ENABLE; - hdma_memtomem_dma2_stream2.Init.MemInc = DMA_MINC_ENABLE; - hdma_memtomem_dma2_stream2.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; - hdma_memtomem_dma2_stream2.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; - hdma_memtomem_dma2_stream2.Init.Mode = DMA_NORMAL; - hdma_memtomem_dma2_stream2.Init.Priority = DMA_PRIORITY_HIGH; - hdma_memtomem_dma2_stream2.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - hdma_memtomem_dma2_stream2.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_memtomem_dma2_stream2.Init.MemBurst = DMA_MBURST_INC4; - hdma_memtomem_dma2_stream2.Init.PeriphBurst = DMA_PBURST_INC4; - if (HAL_DMA_Init(&hdma_memtomem_dma2_stream2) != HAL_OK) - { - Error_Handler( ); - } - - /* Configure DMA request hdma_memtomem_dma2_stream3 on DMA2_Stream3 */ - hdma_memtomem_dma2_stream3.Instance = DMA2_Stream3; - hdma_memtomem_dma2_stream3.Init.Channel = DMA_CHANNEL_0; - hdma_memtomem_dma2_stream3.Init.Direction = DMA_MEMORY_TO_MEMORY; - hdma_memtomem_dma2_stream3.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_memtomem_dma2_stream3.Init.MemInc = DMA_MINC_DISABLE; - hdma_memtomem_dma2_stream3.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; - hdma_memtomem_dma2_stream3.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; - hdma_memtomem_dma2_stream3.Init.Mode = DMA_NORMAL; - hdma_memtomem_dma2_stream3.Init.Priority = DMA_PRIORITY_LOW; - hdma_memtomem_dma2_stream3.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - hdma_memtomem_dma2_stream3.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_memtomem_dma2_stream3.Init.MemBurst = DMA_MBURST_SINGLE; - hdma_memtomem_dma2_stream3.Init.PeriphBurst = DMA_PBURST_SINGLE; - if (HAL_DMA_Init(&hdma_memtomem_dma2_stream3) != HAL_OK) - { - Error_Handler( ); - } - - /* Configure DMA request hdma_memtomem_dma2_stream5 on DMA2_Stream5 */ - hdma_memtomem_dma2_stream5.Instance = DMA2_Stream5; - hdma_memtomem_dma2_stream5.Init.Channel = DMA_CHANNEL_0; - hdma_memtomem_dma2_stream5.Init.Direction = DMA_MEMORY_TO_MEMORY; - hdma_memtomem_dma2_stream5.Init.PeriphInc = DMA_PINC_ENABLE; - hdma_memtomem_dma2_stream5.Init.MemInc = DMA_MINC_DISABLE; - hdma_memtomem_dma2_stream5.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; - hdma_memtomem_dma2_stream5.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; - hdma_memtomem_dma2_stream5.Init.Mode = DMA_NORMAL; - hdma_memtomem_dma2_stream5.Init.Priority = DMA_PRIORITY_LOW; - hdma_memtomem_dma2_stream5.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - hdma_memtomem_dma2_stream5.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_memtomem_dma2_stream5.Init.MemBurst = DMA_MBURST_INC8; - hdma_memtomem_dma2_stream5.Init.PeriphBurst = DMA_PBURST_INC8; - if (HAL_DMA_Init(&hdma_memtomem_dma2_stream5) != HAL_OK) - { - Error_Handler( ); - } - - /* DMA interrupt init */ - /* DMA1_Stream0_IRQn interrupt configuration */ - HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn); - /* DMA1_Stream5_IRQn interrupt configuration */ - HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 1, 0); - HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn); - /* DMA2_Stream1_IRQn interrupt configuration */ - HAL_NVIC_SetPriority(DMA2_Stream1_IRQn, 4, 0); - HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn); - /* DMA2_Stream2_IRQn interrupt configuration */ - HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 4, 0); - HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn); - /* DMA2_Stream5_IRQn interrupt configuration */ - HAL_NVIC_SetPriority(DMA2_Stream5_IRQn, 7, 0); - HAL_NVIC_EnableIRQ(DMA2_Stream5_IRQn); - /* DMA2_Stream6_IRQn interrupt configuration */ - HAL_NVIC_SetPriority(DMA2_Stream6_IRQn, 7, 0); - HAL_NVIC_EnableIRQ(DMA2_Stream6_IRQn); - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOE_CLK_ENABLE(); - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOH_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOC, FPGA_CLK_Pin|FPGA_SYNC_Pin|MUTE_Pin|AD1_CS_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOA, FPGA_BUS_D0_Pin|FPGA_BUS_D1_Pin|FPGA_BUS_D2_Pin|FPGA_BUS_D3_Pin - |FPGA_BUS_D4_Pin|FPGA_BUS_D5_Pin|FPGA_BUS_D6_Pin|FPGA_BUS_D7_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(W25Q16_CS_GPIO_Port, W25Q16_CS_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOD, WM8731_SCK_Pin|WM8731_SDA_Pin, GPIO_PIN_RESET); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(CPU_PW_HOLD_GPIO_Port, CPU_PW_HOLD_Pin, GPIO_PIN_SET); - - /*Configure GPIO pin : PE2 */ - GPIO_InitStruct.Pin = GPIO_PIN_2; - GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; - GPIO_InitStruct.Pull = GPIO_NOPULL; - HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); - - /*Configure GPIO pin : ENC_CLK_Pin */ - GPIO_InitStruct.Pin = ENC_CLK_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING; - GPIO_InitStruct.Pull = GPIO_PULLUP; - HAL_GPIO_Init(ENC_CLK_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pins : ENC2_SW_Pin ENC_DT_Pin ENC2_DT_Pin */ - GPIO_InitStruct.Pin = ENC2_SW_Pin|ENC_DT_Pin|ENC2_DT_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - GPIO_InitStruct.Pull = GPIO_PULLUP; - HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); - - /*Configure GPIO pin : ENC2_CLK_Pin */ - GPIO_InitStruct.Pin = ENC2_CLK_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - GPIO_InitStruct.Pull = GPIO_PULLUP; - HAL_GPIO_Init(ENC2_CLK_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pins : FPGA_CLK_Pin FPGA_SYNC_Pin AD1_CS_Pin */ - GPIO_InitStruct.Pin = FPGA_CLK_Pin|FPGA_SYNC_Pin|AD1_CS_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_PULLUP; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - - /*Configure GPIO pins : FPGA_BUS_D0_Pin FPGA_BUS_D1_Pin FPGA_BUS_D2_Pin FPGA_BUS_D3_Pin - FPGA_BUS_D4_Pin FPGA_BUS_D5_Pin FPGA_BUS_D6_Pin FPGA_BUS_D7_Pin */ - GPIO_InitStruct.Pin = FPGA_BUS_D0_Pin|FPGA_BUS_D1_Pin|FPGA_BUS_D2_Pin|FPGA_BUS_D3_Pin - |FPGA_BUS_D4_Pin|FPGA_BUS_D5_Pin|FPGA_BUS_D6_Pin|FPGA_BUS_D7_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_PULLUP; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - - /*Configure GPIO pins : PTT_IN_Pin AUDIO_48K_CLOCK_Pin CPU_PW_Pin */ - GPIO_InitStruct.Pin = PTT_IN_Pin|AUDIO_48K_CLOCK_Pin|CPU_PW_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; - GPIO_InitStruct.Pull = GPIO_PULLUP; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - - /*Configure GPIO pins : PB11 PB4 PB5 PB8 - PB9 */ - GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_8 - |GPIO_PIN_9; - GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; - GPIO_InitStruct.Pull = GPIO_NOPULL; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - - /*Configure GPIO pins : W25Q16_CS_Pin CPU_PW_HOLD_Pin */ - GPIO_InitStruct.Pin = W25Q16_CS_Pin|CPU_PW_HOLD_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_PULLUP; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - - /*Configure GPIO pins : PD11 PD12 PD2 */ - GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_2; - GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; - GPIO_InitStruct.Pull = GPIO_NOPULL; - HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - - /*Configure GPIO pin : PC6 */ - GPIO_InitStruct.Pin = GPIO_PIN_6; - GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; - GPIO_InitStruct.Pull = GPIO_NOPULL; - HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - - /*Configure GPIO pin : MUTE_Pin */ - GPIO_InitStruct.Pin = MUTE_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_PULLDOWN; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(MUTE_GPIO_Port, &GPIO_InitStruct); - - /*Configure GPIO pin : PC9 */ - GPIO_InitStruct.Pin = GPIO_PIN_9; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF5_SPI1; - HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - - /*Configure GPIO pins : PA8 PA9 PA10 */ - GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10; - GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; - GPIO_InitStruct.Pull = GPIO_NOPULL; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - - /*Configure GPIO pins : WM8731_SCK_Pin WM8731_SDA_Pin */ - GPIO_InitStruct.Pin = WM8731_SCK_Pin|WM8731_SDA_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_PULLUP; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - - /*Configure GPIO pins : KEY_IN_DASH_Pin KEY_IN_DOT_Pin */ - GPIO_InitStruct.Pin = KEY_IN_DASH_Pin|KEY_IN_DOT_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; - GPIO_InitStruct.Pull = GPIO_PULLUP; - HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); - - /* EXTI interrupt init*/ - HAL_NVIC_SetPriority(EXTI0_IRQn, 6, 0); - HAL_NVIC_EnableIRQ(EXTI0_IRQn); - - HAL_NVIC_SetPriority(EXTI1_IRQn, 6, 0); - HAL_NVIC_EnableIRQ(EXTI1_IRQn); - - HAL_NVIC_SetPriority(EXTI2_IRQn, 6, 0); - HAL_NVIC_EnableIRQ(EXTI2_IRQn); - - HAL_NVIC_SetPriority(EXTI3_IRQn, 2, 0); - HAL_NVIC_EnableIRQ(EXTI3_IRQn); - - HAL_NVIC_SetPriority(EXTI9_5_IRQn, 6, 0); - HAL_NVIC_EnableIRQ(EXTI9_5_IRQn); - - HAL_NVIC_SetPriority(EXTI15_10_IRQn, 3, 0); - HAL_NVIC_EnableIRQ(EXTI15_10_IRQn); - -} - -/* FSMC initialization function */ -static void MX_FSMC_Init(void) -{ - - /* USER CODE BEGIN FSMC_Init 0 */ - - /* USER CODE END FSMC_Init 0 */ - - FSMC_NORSRAM_TimingTypeDef Timing = {0}; - - /* USER CODE BEGIN FSMC_Init 1 */ - - /* USER CODE END FSMC_Init 1 */ - - /** Perform the SRAM1 memory initialization sequence - */ - hsram1.Instance = FSMC_NORSRAM_DEVICE; - hsram1.Extended = FSMC_NORSRAM_EXTENDED_DEVICE; - /* hsram1.Init */ - hsram1.Init.NSBank = FSMC_NORSRAM_BANK1; - hsram1.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE; - hsram1.Init.MemoryType = FSMC_MEMORY_TYPE_SRAM; - hsram1.Init.MemoryDataWidth = FSMC_NORSRAM_MEM_BUS_WIDTH_16; - hsram1.Init.BurstAccessMode = FSMC_BURST_ACCESS_MODE_DISABLE; - hsram1.Init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW; - hsram1.Init.WrapMode = FSMC_WRAP_MODE_DISABLE; - hsram1.Init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS; - hsram1.Init.WriteOperation = FSMC_WRITE_OPERATION_ENABLE; - hsram1.Init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE; - hsram1.Init.ExtendedMode = FSMC_EXTENDED_MODE_DISABLE; - hsram1.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE; - hsram1.Init.WriteBurst = FSMC_WRITE_BURST_DISABLE; - hsram1.Init.PageSize = FSMC_PAGE_SIZE_NONE; - /* Timing */ - Timing.AddressSetupTime = 5; - Timing.AddressHoldTime = 15; - Timing.DataSetupTime = 5; - Timing.BusTurnAroundDuration = 3; - Timing.CLKDivision = 16; - Timing.DataLatency = 17; - Timing.AccessMode = FSMC_ACCESS_MODE_A; - /* ExtTiming */ - - if (HAL_SRAM_Init(&hsram1, &Timing, NULL) != HAL_OK) - { - Error_Handler( ); - } - - /* USER CODE BEGIN FSMC_Init 2 */ - - //LCD timings - #if defined(LCD_HX8357B) - Timing.AddressSetupTime = 4; - Timing.DataSetupTime = 4; - Timing.BusTurnAroundDuration = 0; - Timing.AccessMode = FSMC_ACCESS_MODE_A; - #endif - #if defined(LCD_ILI9481) - Timing.AddressSetupTime = 3; - Timing.DataSetupTime = 4; - Timing.BusTurnAroundDuration = 3; - Timing.AccessMode = FSMC_ACCESS_MODE_A; - #endif - if (HAL_SRAM_Init(&hsram1, &Timing, NULL) != HAL_OK) - Error_Handler(); - - /* USER CODE END FSMC_Init 2 */ -} - -/* USER CODE BEGIN 4 */ - -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* User can add his own implementation to report the HAL error return state */ - - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* User can add his own implementation to report the file name and line number, - tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Src/profiler.c b/Src/profiler.c deleted file mode 100644 index e9484f2..0000000 --- a/Src/profiler.c +++ /dev/null @@ -1,98 +0,0 @@ -#include "profiler.h" -#include "functions.h" - -//Public variables -static PROFILE_INFO profiles[PROFILES_COUNT] = {0}; // collection of profilers - -// initialize the profiler -void InitProfiler() -{ - for (uint8_t i = 0; i < PROFILES_COUNT; i++) - { - profiles[i].startTime = 0; - profiles[i].endTime = 0; - profiles[i].diff = 0; - profiles[i].samples = 0; - profiles[i].started = false; - } -} - -// start profiler -void StartProfiler(uint8_t pid) -{ - if (pid >= PROFILES_COUNT) - return; - if (profiles[pid].started) - return; - profiles[pid].started = true; - profiles[pid].startTime = HAL_GetTick(); -} - -// run profiler in microseconds -void StartProfilerUs() -{ - if (profiles[PROFILES_COUNT - 1].started) - return; - profiles[PROFILES_COUNT - 1].started = true; - profiles[PROFILES_COUNT - 1].startTime = DWT->CYCCNT; -} - -// terminate the profiler -void EndProfiler(uint8_t pid, bool summarize) -{ - if (pid >= PROFILES_COUNT) - return; - if (!profiles[pid].started) - return; - profiles[pid].endTime = HAL_GetTick(); - if (summarize) - profiles[pid].diff += profiles[pid].endTime - profiles[pid].startTime; - else - profiles[pid].diff = profiles[pid].endTime - profiles[pid].startTime; - profiles[pid].samples++; - profiles[pid].started = false; -} - -// complete profiler in microseconds -void EndProfilerUs(bool summarize) -{ - if (!profiles[PROFILES_COUNT - 1].started) - return; - profiles[PROFILES_COUNT - 1].endTime = DWT->CYCCNT; - uint32_t diff = (profiles[PROFILES_COUNT - 1].endTime - profiles[PROFILES_COUNT - 1].startTime); - if (summarize) - profiles[PROFILES_COUNT - 1].diff += diff; - else - profiles[PROFILES_COUNT - 1].diff = diff; - profiles[PROFILES_COUNT - 1].samples++; - profiles[PROFILES_COUNT - 1].started = false; -} - -// output the profiler results -void PrintProfilerResult() -{ - bool printed = false; - for (uint8_t i = 0; i < PROFILES_COUNT; i++) - if (profiles[i].samples > 0) - { - sendToDebug_str("Profile #"); - sendToDebug_uint8(i, true); - sendToDebug_str(" Samples: "); - sendToDebug_uint32(profiles[i].samples, true); - if (i == PROFILES_COUNT - 1) - { - sendToDebug_str(" Time, us: "); - sendToDebug_uint32(profiles[i].diff / (SystemCoreClock / 1000000), false); - } - else - { - sendToDebug_str(" Time, ms: "); - sendToDebug_uint32(profiles[i].diff, false); - } - profiles[i].diff = 0; - profiles[i].samples = 0; - printed = true; - } - if (printed) - sendToDebug_str("\r\n"); -} diff --git a/Src/profiler.h b/Src/profiler.h deleted file mode 100644 index f02ed3b..0000000 --- a/Src/profiler.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef PROFILER_h -#define PROFILER_h - -#include "stm32f4xx_hal.h" -#include -#define PROFILES_COUNT 7 // number of profilers - -typedef struct // profiler structure -{ - uint32_t startTime; - uint32_t endTime; - uint32_t diff; - bool started; - uint32_t samples; -} PROFILE_INFO; - -// Public methods -extern void InitProfiler(void); // initialize the profiler -extern void StartProfiler(uint8_t pid); // start profiler -extern void EndProfiler(uint8_t pid, bool summarize); // terminate the profiler -extern void PrintProfilerResult(void); // output the profiler results -extern void StartProfilerUs(void); // run profiler in microseconds -extern void EndProfilerUs(bool summarize); // complete profiler in microseconds - -#endif diff --git a/Src/rf_unit.c b/Src/rf_unit.c deleted file mode 100644 index 0b821e1..0000000 --- a/Src/rf_unit.c +++ /dev/null @@ -1,91 +0,0 @@ -#include "stm32f4xx_hal.h" -#include "main.h" -#include "rf_unit.h" -#include "lcd.h" -#include "trx_manager.h" -#include "settings.h" -#include "system_menu.h" -#include "functions.h" -#include "audio_filters.h" - -#define SENS_TABLE_COUNT 24 -static const int16_t KTY81_120_sensTable[SENS_TABLE_COUNT][2] = { // table of sensor characteristics - {-55, 490}, - {-50, 515}, - {-40, 567}, - {-30, 624}, - {-20, 684}, - {-10, 747}, - {0, 815}, - {10, 886}, - {20, 961}, - {25, 1000}, - {30, 1040}, - {40, 1122}, - {50, 1209}, - {60, 1299}, - {70, 1392}, - {80, 1490}, - {90, 1591}, - {100, 1696}, - {110, 1805}, - {120, 1915}, - {125, 1970}, - {130, 2023}, - {140, 2124}, - {150, 2211}}; - -void RF_UNIT_ProcessSensors(void) -{ - //SWR - float32_t forward = (float32_t)(HAL_ADCEx_InjectedGetValue(&hadc1, ADC_INJECTED_RANK_2)) * 3.3f / 4096.0f; - float32_t backward = (float32_t)(HAL_ADCEx_InjectedGetValue(&hadc1, ADC_INJECTED_RANK_1)) * 3.3f / 4096.0f; - float32_t ptt_sw1 = (float32_t)(HAL_ADCEx_InjectedGetValue(&hadc1, ADC_INJECTED_RANK_3)) * 3.3f / 4096.0f; - float32_t ptt_sw2 = (float32_t)(HAL_ADCEx_InjectedGetValue(&hadc1, ADC_INJECTED_RANK_4)) * 3.3f / 4096.0f; - float32_t alc = (float32_t)(HAL_ADCEx_InjectedGetValue(&hadc2, ADC_INJECTED_RANK_2)) * 3.3f / 4096.0f; - float32_t power_in = (float32_t)(HAL_ADCEx_InjectedGetValue(&hadc2, ADC_INJECTED_RANK_1)) * 3.3f / 4096.0f; - - power_in = power_in * 10.f; //do voltage calibration in future!!! - if(fabsf(TRX_InVoltage - power_in) > 0.2f) - TRX_InVoltage = power_in; - - static float32_t TRX_VLT_forward = 0.0f; - static float32_t TRX_VLT_backward = 0.0f; - forward = forward / (1510.0f / (0.1f + 1510.0f)); // adjust the voltage based on the voltage divider (0.1 ohm and 510 ohm) - if (forward < 0.01f) // do not measure less than 10mV - { - TRX_VLT_forward = 0.0f; - TRX_VLT_backward = 0.0f; - TRX_SWR = 1.0f; - } - else - { - forward += 0.21f; // drop on diode - forward = forward * CALIBRATE.swr_trans_rate; // Transformation ratio of the SWR meter - - backward = backward / (1510.0f / (0.1f + 1510.0f)); // adjust the voltage based on the voltage divider (0.1 ohm and 510 ohm) - if (backward >= 0.01f) // do not measure less than 10mV - { - backward += 0.21f; // drop on diode - backward = backward * CALIBRATE.swr_trans_rate; // Transformation ratio of the SWR meter - } - else - backward = 0.001f; - - TRX_VLT_forward = TRX_VLT_forward + (forward - TRX_VLT_forward) / 2; - TRX_VLT_backward = TRX_VLT_backward + (backward - TRX_VLT_backward) / 2; - TRX_SWR = (TRX_VLT_forward + TRX_VLT_backward) / (TRX_VLT_forward - TRX_VLT_backward); - - if (TRX_VLT_backward > TRX_VLT_forward) - TRX_SWR = 10.0f; - if (TRX_SWR > 10.0f) - TRX_SWR = 10.0f; - - TRX_PWR_Forward = (TRX_VLT_forward * TRX_VLT_forward) / 50.0f; - if (TRX_PWR_Forward < 0.0f) - TRX_PWR_Forward = 0.0f; - TRX_PWR_Backward = (TRX_VLT_backward * TRX_VLT_backward) / 50.0f; - if (TRX_PWR_Backward < 0.0f) - TRX_PWR_Backward = 0.0f; - } -} diff --git a/Src/rf_unit.h b/Src/rf_unit.h deleted file mode 100644 index c4e2cc0..0000000 --- a/Src/rf_unit.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef RF_UNIT_h -#define RF_UNIT_h - -#include "stm32f4xx_hal.h" -#include - -extern void RF_UNIT_ProcessSensors(void); - -#endif diff --git a/Src/screen_layout.h b/Src/screen_layout.h deleted file mode 100644 index 6effbda..0000000 --- a/Src/screen_layout.h +++ /dev/null @@ -1,153 +0,0 @@ -#ifndef LCD_Layout_h -#define LCD_Layout_h - -#include "lcd_driver.h" -#include "color_themes.h" -#include "fonts.h" - -//Top row of status buttons -#define LAY_TOPBUTTONS_X1 0 -#define LAY_TOPBUTTONS_X2 (LCD_WIDTH - 1) -#define LAY_TOPBUTTONS_Y1 1 -#define LAY_TOPBUTTONS_Y2 50 -#define LAY_TOPBUTTONS_WIDTH 62 -#define LAY_TOPBUTTONS_HEIGHT 40 -#define LAY_TOPBUTTONS_TB_MARGIN 2 -#define LAY_TOPBUTTONS_LR_MARGIN 2 -#define LAY_TOPBUTTONS_PRE_X (uint16_t)(LAY_TOPBUTTONS_X1 + LAY_TOPBUTTONS_LR_MARGIN) -#define LAY_TOPBUTTONS_PRE_Y LAY_TOPBUTTONS_Y1 -#define LAY_TOPBUTTONS_ATT_X (uint16_t)(LAY_TOPBUTTONS_PRE_X + LAY_TOPBUTTONS_WIDTH + LAY_TOPBUTTONS_LR_MARGIN) -#define LAY_TOPBUTTONS_ATT_Y LAY_TOPBUTTONS_Y1 -#define LAY_TOPBUTTONS_AGC_X (uint16_t)(LAY_TOPBUTTONS_ATT_X + LAY_TOPBUTTONS_WIDTH + LAY_TOPBUTTONS_LR_MARGIN) -#define LAY_TOPBUTTONS_AGC_Y LAY_TOPBUTTONS_Y1 -#define LAY_TOPBUTTONS_FAST_X (uint16_t)(LAY_TOPBUTTONS_AGC_X + LAY_TOPBUTTONS_WIDTH + LAY_TOPBUTTONS_LR_MARGIN) -#define LAY_TOPBUTTONS_FAST_Y LAY_TOPBUTTONS_Y1 -#define LAY_TOPBUTTONS_MUTE_X (uint16_t)(LAY_TOPBUTTONS_FAST_X + LAY_TOPBUTTONS_WIDTH + LAY_TOPBUTTONS_LR_MARGIN) -#define LAY_TOPBUTTONS_MUTE_Y LAY_TOPBUTTONS_Y1 -#define LAY_TOPBUTTONS_LOCK_X (uint16_t)(LAY_TOPBUTTONS_MUTE_X + LAY_TOPBUTTONS_WIDTH + LAY_TOPBUTTONS_LR_MARGIN) -#define LAY_TOPBUTTONS_LOCK_Y LAY_TOPBUTTONS_Y1 -//Clock -#define LAY_CLOCK_POS_Y 17 -#define LAY_CLOCK_POS_HRS_X (LCD_WIDTH - 75) -#define LAY_CLOCK_POS_MIN_X (uint16_t)(LAY_CLOCK_POS_HRS_X + 25) -#define LAY_CLOCK_POS_SEC_X (uint16_t)(LAY_CLOCK_POS_MIN_X + 25) -#define LAY_CLOCK_FONT &FreeSans9pt7b -//Frequency output -#define LAY_FREQ_X_OFFSET_100 37 -#define LAY_FREQ_X_OFFSET_10 73 -#define LAY_FREQ_X_OFFSET_1 113 -#define LAY_FREQ_X_OFFSET_KHZ 170 -#define LAY_FREQ_X_OFFSET_HZ 307 -#define LAY_FREQ_HEIGHT 51 -#define LAY_FREQ_WIDTH 370 -#define LAY_FREQ_TOP_OFFSET 15 -#define LAY_FREQ_LEFT_MARGIN 37 -#define LAY_FREQ_RIGHT_MARGIN (uint16_t)(LCD_WIDTH - LAY_FREQ_LEFT_MARGIN - LAY_FREQ_WIDTH) -#define LAY_FREQ_BOTTOM_OFFSET 8 -#define LAY_FREQ_BLOCK_HEIGHT (uint16_t)(LAY_FREQ_HEIGHT + LAY_FREQ_TOP_OFFSET + LAY_FREQ_BOTTOM_OFFSET) -#define LAY_FREQ_Y_TOP LAY_TOPBUTTONS_Y2 -#define LAY_FREQ_Y_BASELINE (uint16_t)(LAY_TOPBUTTONS_Y2 + LAY_FREQ_HEIGHT + LAY_FREQ_TOP_OFFSET) -#define LAY_FREQ_Y_BASELINE_SMALL (uint16_t)(LAY_FREQ_Y_BASELINE - 2) -#define LAY_FREQ_FONT &FreeSans36pt7b -#define LAY_FREQ_SMALL_FONT &Quito32pt7b -#define LAY_FREQ_DELIMITER_Y_OFFSET 0 -#define LAY_FREQ_DELIMITER_X1_OFFSET 151 -#define LAY_FREQ_DELIMITER_X2_OFFSET 285 -//Display statuses under frequency -#define LAY_STATUS_Y_OFFSET (uint16_t)(LAY_FREQ_Y_TOP + LAY_FREQ_BLOCK_HEIGHT + 1) -#define LAY_STATUS_HEIGHT 44 -#define LAY_STATUS_BAR_X_OFFSET 60 -#define LAY_STATUS_BAR_Y_OFFSET 16 -#define LAY_STATUS_BAR_HEIGHT 10 -#define LAY_STATUS_TXRX_X_OFFSET 3 -#define LAY_STATUS_TXRX_Y_OFFSET -50 -#define LAY_STATUS_TXRX_FONT &FreeSans9pt7b -#define LAY_STATUS_VFO_X_OFFSET 0 -#define LAY_STATUS_VFO_Y_OFFSET -43 -#define LAY_STATUS_VFO_BLOCK_WIDTH 37 -#define LAY_STATUS_VFO_BLOCK_HEIGHT 22 -#define LAY_STATUS_ANT_X_OFFSET 0 -#define LAY_STATUS_ANT_Y_OFFSET -23 -#define LAY_STATUS_ANT_BLOCK_WIDTH 37 -#define LAY_STATUS_ANT_BLOCK_HEIGHT 22 -#define LAY_STATUS_TX_LABELS_OFFSET_X 5 -#define LAY_STATUS_TX_LABELS_MARGIN_X 55 -#define LAY_STATUS_SMETER_WIDTH 400 -#define LAY_STATUS_SMETER_MARKER_HEIGHT 30 -#define LAY_STATUS_PMETER_WIDTH 300 -#define LAY_STATUS_AMETER_WIDTH 90 -#define LAY_STATUS_ALC_BAR_X_OFFSET 10 -#define LAY_STATUS_LABELS_OFFSET_Y 0 -#define LAY_STATUS_LABELS_FONT_SIZE 1 -#define LAY_STATUS_LABEL_S_VAL_X_OFFSET 12 -#define LAY_STATUS_LABEL_S_VAL_Y_OFFSET 25 -#define LAY_STATUS_LABEL_S_VAL_FONT &FreeSans7pt7b -#define LAY_STATUS_LABEL_DBM_X_OFFSET 5 -#define LAY_STATUS_LABEL_DBM_Y_OFFSET 36 -#define LAY_STATUS_LABEL_BW_X_OFFSET 60 -#define LAY_STATUS_LABEL_BW_Y_OFFSET 36 -#define LAY_STATUS_LABEL_RIT_X_OFFSET 160 -#define LAY_STATUS_LABEL_RIT_Y_OFFSET 36 -#define LAY_STATUS_LABEL_VLT_X_OFFSET 250 -#define LAY_STATUS_LABEL_VLT_Y_OFFSET 36 -#define LAY_STATUS_LABEL_NOTCH_X_OFFSET 335 -#define LAY_STATUS_LABEL_NOTCH_Y_OFFSET 36 -#define LAY_STATUS_LABEL_FFT_BW_X_OFFSET 420 -#define LAY_STATUS_LABEL_FFT_BW_Y_OFFSET 36 -#define LAY_STATUS_SMETER_PEAK_HOLDTIME 1000 -#define LAY_STATUS_SMETER_TXLABELS_MARGIN 55 -#define LAY_STATUS_SMETER_TXLABELS_PADDING 23 -#define LAY_STATUS_TX_LABELS_VAL_WIDTH 25 -#define LAY_STATUS_TX_LABELS_VAL_HEIGHT 8 -#define LAY_STATUS_TX_ALC_X_OFFSET 40 -#define LAY_STATUS_MODE_X_OFFSET (uint16_t)(LCD_WIDTH - LAY_FREQ_RIGHT_MARGIN + 10) -#define LAY_STATUS_MODE_Y_OFFSET -42 -#define LAY_STATUS_MODE_BLOCK_WIDTH 48 -#define LAY_STATUS_MODE_BLOCK_HEIGHT 22 -#define LAY_STATUS_ERR_OFFSET_X 435 -#define LAY_STATUS_ERR_OFFSET_Y 65 -#define LAY_STATUS_ERR_WIDTH 20 -#define LAY_STATUS_ERR_HEIGHT 8 -#define LAY_TEXTBAR_FONT 2 -#define LAY_TEXTBAR_TEXT_T_BOTTOM_OFFESET 30 -#define LAY_TEXTBAR_TEXT_X_OFFSET 85 -//FFT and waterfall -#define LAY_FFT_HEIGHT 50 -#define LAY_WTF_HEIGHT 55 -#define LAY_FFT_PRINT_SIZE LCD_WIDTH -#define LAY_FFT_CWDECODER_OFFSET 17 -#define LAY_FFT_FFTWTF_POS_Y (uint16_t)(LCD_HEIGHT - LAY_FFT_HEIGHT - LAY_WTF_HEIGHT - LAY_TEXTBAR_TEXT_T_BOTTOM_OFFESET) -#define LAY_FFT_FFTWTF_HEIGHT (uint16_t)(LAY_FFT_FFTWTF_POS_Y + LAY_FFT_HEIGHT + LAY_WTF_HEIGHT) -//System menu -#define LAY_SYSMENU_X1 5 -#define LAY_SYSMENU_X2 400 -#define LAY_SYSMENU_X2_BIGINT 350 -#define LAY_SYSMENU_X2R_BIGINT 400 -#define LAY_SYSMENU_W 458 -#define LAY_SYSMENU_ITEM_HEIGHT 18 -#define LAY_SYSMENU_MAX_ITEMS_ON_PAGE (uint16_t)(LCD_HEIGHT / LAY_SYSMENU_ITEM_HEIGHT) -//Stuff -#define LAY_GREETINGS_X (LCD_WIDTH / 2 - 5) -#define LAY_GREETINGS_Y 25 -//Tooltip -#define LAY_TOOLTIP_TIMEOUT 1000 -#define LAY_TOOLTIP_MARGIN 5 -#define LAY_TOOLTIP_POS_X (LCD_WIDTH / 2) -#define LAY_TOOLTIP_POS_Y 70 -//bottom buttons -#define LAY_BOTTOMBUTTONS_X 0 -#define LAY_BOTTOMBUTTONS_Y (LAY_FFT_FFTWTF_HEIGHT + 1) -#define LAY_BOTTOMBUTTONS_MARGIN 1 -#define LAY_BOTTOMBUTTONS_WIDTH (LCD_WIDTH / 4 - LAY_BOTTOMBUTTONS_MARGIN * 2) -#define LAY_BOTTOMBUTTONS_HEIGHT LAY_TEXTBAR_TEXT_T_BOTTOM_OFFESET -#define LAY_BOTTOMBUTTONS_X1 LAY_BOTTOMBUTTONS_X -#define LAY_BOTTOMBUTTONS_X2 (LAY_BOTTOMBUTTONS_X1 + LAY_BOTTOMBUTTONS_WIDTH + LAY_BOTTOMBUTTONS_MARGIN * 2) -#define LAY_BOTTOMBUTTONS_X3 (LAY_BOTTOMBUTTONS_X2 + LAY_BOTTOMBUTTONS_WIDTH + LAY_BOTTOMBUTTONS_MARGIN * 2) -#define LAY_BOTTOMBUTTONS_X4 (LAY_BOTTOMBUTTONS_X3 + LAY_BOTTOMBUTTONS_WIDTH + LAY_BOTTOMBUTTONS_MARGIN * 2) -//BW Trapezoid -#define LAY_BW_TRAPEZ_POS_X 385 -#define LAY_BW_TRAPEZ_POS_Y 25 -#define LAY_BW_TRAPEZ_HEIGHT 25 -#define LAY_BW_TRAPEZ_WIDTH 90 - -#endif diff --git a/Src/settings.c b/Src/settings.c deleted file mode 100644 index a69bb03..0000000 --- a/Src/settings.c +++ /dev/null @@ -1,593 +0,0 @@ -#include "settings.h" -#include "stm32f4xx_hal.h" -#include -#include -#include "functions.h" -#include "trx_manager.h" -#include "lcd.h" -#include "fpga.h" -#include "main.h" -#include "bands.h" -#include "front_unit.h" - -char version_string[19] = "1.0.0"; //1.2.3-yymmdd.hhmm (concatinate) - -//W25Q16 -static uint8_t Write_Enable = W25Q16_COMMAND_Write_Enable; -static uint8_t Sector_Erase = W25Q16_COMMAND_Sector_Erase; -static uint8_t Page_Program = W25Q16_COMMAND_Page_Program; -static uint8_t Read_Data = W25Q16_COMMAND_Read_Data; -static uint8_t Power_Down = W25Q16_COMMAND_Power_Down; -static uint8_t Get_Status = W25Q16_COMMAND_GetStatus; -static uint8_t Write_Status = W25Q16_COMMAND_WriteStatus; -static uint8_t Write_Status_REG = 0; -static uint8_t Power_Up = W25Q16_COMMAND_Power_Up; - -static uint8_t Address[3] = {0x00}; -struct TRX_SETTINGS TRX; -struct TRX_CALIBRATE CALIBRATE = {0}; -static uint8_t settings_bank = 1; -static uint8_t write_clone[sizeof(TRX)] = {0}; -static uint8_t read_clone[sizeof(TRX)] = {0}; -static uint8_t verify_clone[sizeof(TRX)] = {0}; - -volatile bool NeedSaveSettings = false; -volatile bool NeedSaveCalibration = false; -volatile bool EEPROM_Busy = false; -static bool EEPROM_Enabled = true; - -static void LoadSettingsFromEEPROM(void); -static bool EEPROM_Sector_Erase(uint8_t sector, bool force); -static bool EEPROM_Write_Data(uint8_t *Buffer, uint16_t size, uint8_t sector, bool verify, bool force); -static bool EEPROM_Read_Data(uint8_t *Buffer, uint16_t size, uint8_t sector, bool verif, bool force); -static void EEPROM_PowerDown(void); -static void EEPROM_PowerUp(void); -static void EEPROM_WaitWrite(void); -static uint8_t calculateCSUM(void); -static uint8_t calculateCSUM_EEPROM(void); - -const char *MODE_DESCR[TRX_MODE_COUNT] = { - "LSB", - "USB", - "CW-L", - "CW-U", - "NFM", - "WFM", - "AM", - "DIGL", - "DIGU", - "IQ", - "LOOP", - "NOTX", -}; - -void InitSettings(void) -{ - static bool already_inited = false; - if(already_inited) return; - already_inited = true; - - //concat build date to version -yymmdd.hhmm - uint8_t cur_len = (uint8_t)strlen(version_string); - strcat(version_string, "-"); - version_string[++cur_len] = BUILD_YEAR_CH2; - version_string[++cur_len] = BUILD_YEAR_CH3; - version_string[++cur_len] = BUILD_MONTH_CH0; - version_string[++cur_len] = BUILD_MONTH_CH1; - version_string[++cur_len] = BUILD_DAY_CH0; - version_string[++cur_len] = BUILD_DAY_CH1; - version_string[++cur_len] = '.'; - version_string[++cur_len] = BUILD_HOUR_CH0; - version_string[++cur_len] = BUILD_HOUR_CH1; - version_string[++cur_len] = BUILD_MIN_CH0; - version_string[++cur_len] = BUILD_MIN_CH1; - version_string[++cur_len] = '\0'; - sendToDebug_strln(version_string); -} - -void LoadSettings(bool clear) -{ - BKPSRAM_Enable(); - memcpy(&TRX, (uint32_t*) BACKUP_SRAM_BANK1_ADDR, sizeof(TRX)); - // Check, the data in the backup sram is correct, otherwise we use the second bank - if (TRX.ENDBit != 100 || TRX.flash_id != SETT_VERSION || TRX.csum != calculateCSUM()) - { - memcpy(&TRX, BACKUP_SRAM_BANK2_ADDR, sizeof(TRX)); - if (TRX.ENDBit != 100 || TRX.flash_id != SETT_VERSION || TRX.csum != calculateCSUM()) - { - sendToDebug_strln("[ERR] BACKUP SRAM data incorrect"); - - LoadSettingsFromEEPROM(); - if (TRX.ENDBit != 100 || TRX.flash_id != SETT_VERSION || TRX.csum != calculateCSUM()) - { - sendToDebug_strln("[ERR] EEPROM Settings data incorrect"); - } - else - { - SaveSettings(); - sendToDebug_strln("[OK] Settings data succesfully loaded from EEPROM"); - } - } - else - { - sendToDebug_strln("[OK] Settings data succesfully loaded from BACKUP SRAM bank 2"); - } - } - else - { - sendToDebug_strln("[OK] Settings data succesfully loaded from BACKUP SRAM bank 1"); - } - BKPSRAM_Disable(); - - if (TRX.flash_id != SETT_VERSION || clear || TRX.ENDBit != 100) // code to trace new clean flash - { - if(clear) - sendToDebug_strln("[OK] Soft reset TRX"); - memset(&TRX, 0x00, sizeof(TRX)); - TRX.flash_id = SETT_VERSION; // Firmware ID in SRAM, if it doesn't match, use the default - TRX.VFO_A.Freq = 7100000; // stored VFO-A frequency - TRX.VFO_A.Mode = TRX_MODE_LSB; // saved VFO-A mode - TRX.VFO_A.LPF_Filter_Width = 2700; // saved bandwidth for VFO-A - TRX.VFO_A.HPF_Filter_Width = 300; // saved bandwidth for VFO-A - TRX.VFO_A.AutoNotchFilter = false; // notch filter to cut out noise - TRX.VFO_A.NotchFC = 1000; // cutoff frequency of the notch filter - TRX.VFO_A.AGC = true; // AGC - TRX.VFO_B.Freq = 14150000; // stored VFO-B frequency - TRX.VFO_B.Mode = TRX_MODE_USB; // saved VFO-B mode - TRX.VFO_B.LPF_Filter_Width = 2700; // saved bandwidth for VFO-B - TRX.VFO_B.HPF_Filter_Width = 300; // saved bandwidth for VFO-B - TRX.VFO_B.AutoNotchFilter = false; // notch filter to cut out noise - TRX.VFO_B.NotchFC = 1000; // cutoff frequency of the notch filter - TRX.VFO_B.AGC = true; // AGC - TRX.current_vfo = false; // current VFO (false - A) - TRX.ADC_Driver = true; // preamplifier (ADC driver) - TRX.ATT = false; // attenuator - TRX.ATT_DB = 12.0f; // suppress the attenuator - TRX.ATT_STEP = 6.0f; // step of tuning the attenuator - TRX.FM_SQL_threshold = 4; // FM noise reduction - TRX.Fast = true; // accelerated frequency change when the encoder rotates - for (uint8_t i = 0; i < BANDS_COUNT; i++) - { - TRX.BANDS_SAVED_SETTINGS[i].Freq = BANDS[i].startFreq + (BANDS[i].endFreq - BANDS[i].startFreq) / 2; // saved frequencies by bands - TRX.BANDS_SAVED_SETTINGS[i].Mode = (uint8_t)getModeFromFreq(TRX.BANDS_SAVED_SETTINGS[i].Freq); - TRX.BANDS_SAVED_SETTINGS[i].ATT = TRX.ATT; - TRX.BANDS_SAVED_SETTINGS[i].ATT_DB = TRX.ATT_DB; - TRX.BANDS_SAVED_SETTINGS[i].ADC_Driver = TRX.ADC_Driver; - TRX.BANDS_SAVED_SETTINGS[i].FM_SQL_threshold = TRX.FM_SQL_threshold; - TRX.BANDS_SAVED_SETTINGS[i].AGC = true; - TRX.BANDS_SAVED_SETTINGS[i].AutoGain_Stage = 6; - } - TRX.FFT_Zoom = 1; // approximation of the FFT spectrum - TRX.AutoGain = false; // auto-control preamp and attenuator - TRX.InputType_MIC = true; // type of input to transfer - TRX.InputType_LINE = false; - TRX.InputType_USB = false; - TRX.CW_LPF_Filter = 700; // default value of CW filter width - TRX.CW_HPF_Filter = 0; // default value of CW filter width - TRX.SSB_LPF_Filter = 2700; // default value of SSB filter width - TRX.SSB_HPF_Filter = 300; // default value of SSB filter width - TRX.AM_LPF_Filter = 4000; // default value of AM filter width - TRX.FM_LPF_Filter = 15000; // default value of the FM filter width - TRX.RF_Power = 20; //output power (%) - TRX.RX_AGC_SSB_speed = 10; // AGC receive rate on SSB - TRX.RX_AGC_CW_speed = 1; // AGC receive rate on CW - TRX.TX_AGC_speed = 3; // AGC transfer rate - TRX.BandMapEnabled = true; // automatic change of mode according to the range map - TRX.FFT_Enabled = true; // use FFT spectrum - TRX.CW_GENERATOR_SHIFT_HZ = 500; // LO offset in CW mode - TRX.CW_Key_timeout = 500; // time of releasing transmission after the last character on the key - TRX.FFT_Averaging = 4; // averaging the FFT to make it smoother - TRX.CW_SelfHear = true; // self-control CW - TRX.ADC_SHDN = false; // ADC disable - TRX.FFT_Window = 1; - TRX.Locked = false; // Lock control - TRX.CLAR = false; // Split frequency mode (receive one VFO, transmit another) - TRX.TWO_SIGNAL_TUNE = false; // Two-signal generator in TUNE mode (1 + 2kHz) - TRX.IF_Gain = 60; // IF gain, dB (before all processing and AGC) - TRX.CW_KEYER = true; // Automatic key - TRX.CW_KEYER_WPM = 30; // Automatic key speed - TRX.Debug_Console = false; // Debug output to DEBUG / UART port - TRX.FFT_Color = 1; // FFT display color - TRX.FFT_Grid = 1; // FFT grid style - TRX.ShiftEnabled = false; // activate the SHIFT mode - TRX.SHIFT_INTERVAL = 5000; // Detune range with the SHIFT knob (5000 = -5000hz / + 5000hz) - TRX.DNR_SNR_THRESHOLD = 50; // Digital noise reduction level - TRX.DNR_AVERAGE = 2; // DNR averaging when looking for average magnitude - TRX.DNR_MINIMAL = 99; // DNR averaging when searching for minimum magnitude - TRX.FRQ_STEP = 10; // frequency tuning step by the main encoder - TRX.FRQ_FAST_STEP = 100; // frequency tuning step by the main encoder in FAST mode - TRX.AGC_GAIN_TARGET = -35; // Maximum (target) AGC gain - TRX.MIC_GAIN = 3; // Microphone gain - TRX.RX_EQ_LOW = 0; // Receiver Equalizer (Low) - TRX.RX_EQ_MID = 0; // Receiver EQ (mids) - TRX.RX_EQ_HIG = 0; // Receiver EQ (high) - TRX.MIC_EQ_LOW = 0; // Mic EQ (Low) - TRX.MIC_EQ_MID = 0; // Mic Equalizer (Mids) - TRX.MIC_EQ_HIG = 0; // Mic EQ (high) - TRX.Beeper = true; //Keyboard beeper - TRX.FFT_Background = true; //FFT gradient background - TRX.FFT_Compressor = true; //Compress FFT Peaks - TRX.Encoder_Accelerate = true; //Accelerate Encoder on fast rate - strcpy(TRX.CALLSIGN, "HamRad"); // Callsign - TRX.ColorThemeId = 0; //Selected Color theme - TRX.Transverter_Enabled = false; //Enable transverter mode - TRX.Transverter_Offset_Mhz = 120; //Offset from VFO - TRX.Volume = 50; //AF Volume - TRX.CW_GaussFilter = true; //Gauss responce LPF filter - - TRX.ENDBit = 100; // Bit for the end of a successful write to eeprom - sendToDebug_strln("[OK] Loaded default settings"); - SaveSettings(); - SaveSettingsToEEPROM(); - } -} - -static void LoadSettingsFromEEPROM(void) -{ - EEPROM_PowerUp(); - uint8_t tryes = 0; - while (tryes < EEPROM_REPEAT_TRYES && !EEPROM_Read_Data((uint8_t *)&TRX, sizeof(TRX), EEPROM_SECTOR_SETTINGS, true, false)) - { - tryes++; - } - if (tryes >= EEPROM_REPEAT_TRYES) - sendToDebug_strln("[ERR] Read EEPROM SETTINGS multiple errors"); - EEPROM_PowerDown(); -} - -void LoadCalibration(bool clear) -{ - EEPROM_PowerUp(); - uint8_t tryes = 0; - while (tryes < EEPROM_REPEAT_TRYES && !EEPROM_Read_Data((uint8_t *)&CALIBRATE, sizeof(CALIBRATE), EEPROM_SECTOR_CALIBRATION, true, false)) - { - tryes++; - } - if (tryes >= EEPROM_REPEAT_TRYES) - sendToDebug_strln("[ERR] Read EEPROM CALIBRATE multiple errors"); - - if (CALIBRATE.ENDBit != 100 || CALIBRATE.flash_id != CALIB_VERSION || clear || CALIBRATE.csum != calculateCSUM_EEPROM()) // code for checking the firmware in the eeprom, if it does not match, we use the default - { - sendToDebug_str("[ERR] CALIBRATE Flash check"); - sendToDebug_uint8(CALIBRATE.ENDBit, false); - sendToDebug_uint8(CALIBRATE.flash_id, false); - sendToDebug_uint8(CALIB_VERSION, false); - sendToDebug_uint8(clear, false); - sendToDebug_uint8(CALIBRATE.csum, false); - sendToDebug_uint8(calculateCSUM_EEPROM(), false); - - CALIBRATE.flash_id = CALIB_VERSION; // code for checking the firmware in the eeprom, if it does not match, we use the default - - CALIBRATE.ENCODER_INVERT = false; // invert left-right rotation of the main encoder - CALIBRATE.ENCODER2_INVERT = true; // invert left-right rotation of the optional encoder - CALIBRATE.ENCODER_DEBOUNCE = 0; // time to eliminate contact bounce at the main encoder, ms - CALIBRATE.ENCODER2_DEBOUNCE = 50; // time to eliminate contact bounce at the additional encoder, ms - CALIBRATE.ENCODER_SLOW_RATE = 25; // slow down the encoder for high resolutions - CALIBRATE.ENCODER_ON_FALLING = false; // encoder only triggers when level A falls - CALIBRATE.CIC_GAINER_val = 78; // Offset from the output of the CIC compensator - CALIBRATE.CICFIR_GAINER_val = 26; // Offset from the output of the CIC compensator - CALIBRATE.TXCICFIR_GAINER_val = 27; // Offset from the TX-CIC output of the compensator - CALIBRATE.DAC_GAINER_val = 26; // DAC offset offset - // Calibrate the maximum output power for each band - CALIBRATE.rf_out_power_lf = 40; // <2mhz - CALIBRATE.rf_out_power_hf_low = 45; // <5mhz - CALIBRATE.rf_out_power_hf = 26; // <30mhz - CALIBRATE.rf_out_power_hf_high = 80; // >30mhz - CALIBRATE.smeter_calibration = -13; // S-Meter calibration, set when calibrating the transceiver to S9 - CALIBRATE.swr_trans_rate = 11.0f; //SWR Transormator rate - - CALIBRATE.ENDBit = 100; - sendToDebug_strln("[OK] Loaded default calibrate settings"); - SaveCalibration(); - } - EEPROM_PowerDown(); -} - -inline VFO *CurrentVFO(void) -{ - if (!TRX.current_vfo) - return &TRX.VFO_A; - else - return &TRX.VFO_B; -} - -inline VFO *SecondaryVFO(void) -{ - if (!TRX.current_vfo) - return &TRX.VFO_B; - else - return &TRX.VFO_A; -} - -void SaveSettings(void) -{ - BKPSRAM_Enable(); - TRX.csum = calculateCSUM(); - if(settings_bank == 1) - { - memcpy(BACKUP_SRAM_BANK1_ADDR, &TRX, sizeof(TRX)); - memset(BACKUP_SRAM_BANK2_ADDR, 0x00, sizeof(TRX)); - } - else - { - memcpy(BACKUP_SRAM_BANK2_ADDR, &TRX, sizeof(TRX)); - memset(BACKUP_SRAM_BANK1_ADDR, 0x00, sizeof(TRX)); - } - BKPSRAM_Disable(); - NeedSaveSettings = false; - //sendToDebug_str("[OK] Settings Saved to bank "); - //sendToDebug_uint8(settings_bank, false); - //sendToDebug_uint32(sizeof(TRX), false); - if(settings_bank == 1) - settings_bank = 2; - else - settings_bank = 1; -} - -void SaveSettingsToEEPROM(void) -{ - if (EEPROM_Busy) - return; - EEPROM_PowerUp(); - EEPROM_Busy = true; - TRX.csum = calculateCSUM(); - uint8_t tryes = 0; - while (tryes < EEPROM_REPEAT_TRYES && !EEPROM_Sector_Erase(EEPROM_SECTOR_SETTINGS, false)) - { - tryes++; - } - if (tryes >= EEPROM_REPEAT_TRYES) - { - sendToDebug_strln("[ERR] Erase EEPROM Settings multiple errors"); - sendToDebug_flush(); - EEPROM_Busy = false; - return; - } - tryes = 0; - while (tryes < EEPROM_REPEAT_TRYES && !EEPROM_Write_Data((uint8_t *)&TRX, sizeof(TRX), EEPROM_SECTOR_SETTINGS, true, false)) - { - tryes++; - } - if (tryes >= EEPROM_REPEAT_TRYES) - { - sendToDebug_strln("[ERR] Write EEPROM Settings multiple errors"); - sendToDebug_flush(); - EEPROM_Busy = false; - return; - } - - EEPROM_Busy = false; - EEPROM_PowerDown(); - sendToDebug_strln("[OK] EEPROM Settings Saved"); - sendToDebug_flush(); -} - -void SaveCalibration(void) -{ - if (EEPROM_Busy) - return; - EEPROM_PowerUp(); - EEPROM_Busy = true; - - CALIBRATE.csum = calculateCSUM_EEPROM(); - uint8_t tryes = 0; - while (tryes < EEPROM_REPEAT_TRYES && !EEPROM_Sector_Erase(EEPROM_SECTOR_CALIBRATION, false)) - { - tryes++; - } - if (tryes >= EEPROM_REPEAT_TRYES) - { - sendToDebug_strln("[ERR] Erase EEPROM calibrate multiple errors"); - EEPROM_Busy = false; - return; - } - tryes = 0; - while (tryes < EEPROM_REPEAT_TRYES && !EEPROM_Write_Data((uint8_t *)&CALIBRATE, sizeof(CALIBRATE), EEPROM_SECTOR_CALIBRATION, true, false)) - { - tryes++; - } - if (tryes >= EEPROM_REPEAT_TRYES) - { - sendToDebug_strln("[ERR] Write EEPROM calibrate multiple errors"); - EEPROM_Busy = false; - return; - } - - EEPROM_Busy = false; - EEPROM_PowerDown(); - sendToDebug_strln("[OK] EEPROM Calibrations Saved"); - NeedSaveCalibration = false; -} - -static bool EEPROM_Sector_Erase(uint8_t sector, bool force) -{ - if (!force && !EEPROM_Enabled) - return true; - if (!force && SPI_process) - return false; - else - SPI_process = true; - - uint32_t BigAddress = sector * W25Q16_SECTOR_SIZE; - Address[2] = (BigAddress >> 16) & 0xFF; - Address[1] = (BigAddress >> 8) & 0xFF; - Address[0] = BigAddress & 0xFF; - - //disable write protect - //SPI_Transmit(&Write_Status, NULL, 1, W25Q16_CS_GPIO_Port, W25Q16_CS_Pin, true, SPI_EEPROM_PRESCALER); // WRITE STATUS REGISTER Command - //SPI_Transmit(&Write_Status_REG, NULL, 1, W25Q16_CS_GPIO_Port, W25Q16_CS_Pin, false, SPI_EEPROM_PRESCALER); // WRITE STATUS REGISTER argument - //EEPROM_WaitWrite(); - - SPI_Transmit(&Write_Enable, NULL, 1, W25Q16_CS_GPIO_Port, W25Q16_CS_Pin, false, SPI_EEPROM_PRESCALER); // Write Enable Command - SPI_Transmit(&Sector_Erase, NULL, 1, W25Q16_CS_GPIO_Port, W25Q16_CS_Pin, true, SPI_EEPROM_PRESCALER); // Erase Command - SPI_Transmit(Address, NULL, 3, W25Q16_CS_GPIO_Port, W25Q16_CS_Pin, false, SPI_EEPROM_PRESCALER); // Write Address ( The first address of flash module is 0x00000000 ) - EEPROM_WaitWrite(); - - SPI_process = false; - return true; -} - -static bool EEPROM_Write_Data(uint8_t *Buffer, uint16_t size, uint8_t sector, bool verify, bool force) -{ - if (!force && !EEPROM_Enabled) - return true; - if (!force && SPI_process) - return false; - else - SPI_process = true; - if(size > sizeof(write_clone)) - { - sendToDebug_strln("EEPROM buffer error"); - return false; - } - memcpy(write_clone, Buffer, size); - - const uint16_t page_size = 256; - for (uint16_t page = 0; page <= (size / page_size); page++) - { - uint32_t BigAddress = page * page_size + (sector * W25Q16_SECTOR_SIZE); - Address[2] = (BigAddress >> 16) & 0xFF; - Address[1] = (BigAddress >> 8) & 0xFF; - Address[0] = BigAddress & 0xFF; - uint16_t bsize = size - page_size * page; - if (bsize > page_size) - bsize = page_size; - - SPI_Transmit(&Write_Enable, NULL, 1, W25Q16_CS_GPIO_Port, W25Q16_CS_Pin, false, SPI_EEPROM_PRESCALER); // Write Enable Command - SPI_Transmit(&Page_Program, NULL, 1, W25Q16_CS_GPIO_Port, W25Q16_CS_Pin, true, SPI_EEPROM_PRESCALER); // Write Command - SPI_Transmit(Address, NULL, 3, W25Q16_CS_GPIO_Port, W25Q16_CS_Pin, true, SPI_EEPROM_PRESCALER); // Write Address ( The first address of flash module is 0x00000000 ) - SPI_Transmit((uint8_t *)(write_clone + page_size * page), NULL, bsize, W25Q16_CS_GPIO_Port, W25Q16_CS_Pin, false, SPI_EEPROM_PRESCALER); // Write Data - EEPROM_WaitWrite(); - } - - //verify - if (verify) - { - EEPROM_Read_Data(verify_clone, size, sector, false, true); - for (uint16_t i = 0; i < size; i++) - if (verify_clone[i] != write_clone[i]) - { - EEPROM_Sector_Erase(sector, true); - SPI_process = false; - return false; - } - } - SPI_process = false; - return true; -} - -static bool EEPROM_Read_Data(uint8_t *Buffer, uint16_t size, uint8_t sector, bool verify, bool force) -{ - if (!force && !EEPROM_Enabled) - return true; - if (!force && SPI_process) - return false; - else - SPI_process = true; - - uint32_t BigAddress = sector * W25Q16_SECTOR_SIZE; - Address[2] = (BigAddress >> 16) & 0xFF; - Address[1] = (BigAddress >> 8) & 0xFF; - Address[0] = BigAddress & 0xFF; - - bool res = SPI_Transmit(&Read_Data, NULL, 1, W25Q16_CS_GPIO_Port, W25Q16_CS_Pin, true, SPI_EEPROM_PRESCALER); // Read Command - if (!res) - { - EEPROM_Enabled = false; - sendToDebug_strln("[ERR] EEPROM not found..."); - LCD_showError("EEPROM init error", true); - SPI_process = false; - return true; - } - - SPI_Transmit(Address, NULL, 3, W25Q16_CS_GPIO_Port, W25Q16_CS_Pin, true, SPI_EEPROM_PRESCALER); // Write Address - SPI_Transmit(NULL, (uint8_t *)(Buffer), size, W25Q16_CS_GPIO_Port, W25Q16_CS_Pin, false, SPI_EEPROM_PRESCALER); // Read - - //verify - if (verify) - { - EEPROM_Read_Data(read_clone, size, sector, false, true); - for (uint16_t i = 0; i < size; i++) - if (read_clone[i] != Buffer[i]) - { - sendToDebug_uint8(read_clone[i],false); - SPI_process = false; - return false; - } - } - SPI_process = false; - return true; -} - -static void EEPROM_WaitWrite(void) -{ - if (!EEPROM_Enabled) - return; - uint8_t status = 0; - uint8_t tryes = 0; - do - { - tryes++; - SPI_Transmit(&Get_Status, NULL, 1, W25Q16_CS_GPIO_Port, W25Q16_CS_Pin, true, SPI_EEPROM_PRESCALER); // Get Status command - SPI_Transmit(NULL, &status, 1, W25Q16_CS_GPIO_Port, W25Q16_CS_Pin, false, SPI_EEPROM_PRESCALER); // Read data - if((status & 0x01) == 0x01) - HAL_Delay(1); - } - while((status & 0x01) == 0x01 && (tryes < 200)); - if(tryes == 200) - sendToDebug_strln("[ERR]EEPROM Lock wait error"); -} - -static void EEPROM_PowerDown(void) -{ - if (!EEPROM_Enabled) - return; - SPI_Transmit(&Power_Down, NULL, 1, W25Q16_CS_GPIO_Port, W25Q16_CS_Pin, false, SPI_EEPROM_PRESCALER); // Power_Down Command -} - -static void EEPROM_PowerUp(void) -{ - if (!EEPROM_Enabled) - return; - SPI_Transmit(&Power_Up, NULL, 1, W25Q16_CS_GPIO_Port, W25Q16_CS_Pin, false, SPI_EEPROM_PRESCALER); // Power_Up Command - EEPROM_WaitWrite(); -} - -void BKPSRAM_Enable(void) -{ - RCC->APB1ENR |= RCC_APB1ENR_PWREN; - RCC->AHB1ENR |= RCC_AHB1ENR_BKPSRAMEN; - HAL_PWREx_EnableBkUpReg(); - HAL_PWR_EnableBkUpAccess(); - *(__IO uint32_t *) CSR_BRE_BB = (uint32_t) ENABLE; - while (!(PWR->CSR & (PWR_FLAG_BRR))); -} - -void BKPSRAM_Disable(void) -{ - HAL_PWR_DisableBkUpAccess(); -} - -static uint8_t calculateCSUM(void) -{ - uint8_t csum_old = TRX.csum; - uint8_t csum_new = 0; - TRX.csum = 0; - uint8_t* TRX_addr = (uint8_t*)&TRX; - for(uint16_t i = 0; i < sizeof(TRX); i++) - csum_new += *(TRX_addr + i); - TRX.csum = csum_old; - return csum_new; -} - -static uint8_t calculateCSUM_EEPROM(void) -{ - uint8_t csum_old = CALIBRATE.csum; - uint8_t csum_new = - CALIBRATE.csum = 0; - uint8_t* CALIBRATE_addr = (uint8_t*)&CALIBRATE; - for(uint16_t i = 0; i < sizeof(CALIBRATE); i++) - csum_new += *(CALIBRATE_addr + i); - CALIBRATE.csum = csum_old; - return csum_new; -} diff --git a/Src/settings.h b/Src/settings.h deleted file mode 100644 index 048c480..0000000 --- a/Src/settings.h +++ /dev/null @@ -1,228 +0,0 @@ -#ifndef SETTINGS_h -#define SETTINGS_h - -#include "stm32f4xx_hal.h" -#include -#include -#include "functions.h" -#include "bands.h" - -#define SETT_VERSION 100 // Settings config version -#define CALIB_VERSION 100 // Calibration config version -#define ADC_CLOCK 64320000 // ADC generator frequency -#define DAC_CLOCK 160800000 // DAC generator frequency -#define MAX_RX_FREQ_HZ 750000000 // Maximum receive frequency (from the ADC datasheet) -#define MAX_TX_FREQ_HZ (DAC_CLOCK / 2) // Maximum transmission frequency -#define TRX_SAMPLERATE 48000 // audio stream sampling rate during processing -#define MAX_TX_AMPLITUDE 1.0f // Maximum amplitude when transmitting to FPGA -#define AGC_MAX_GAIN 30.0f // Maximum gain in AGC, dB -#define AGC_CLIPPING 6.0f // Limit over target in AGC, dB -#define TUNE_POWER 100 // % of the power selected in the settings when starting TUNE (100 - full) -#define TX_AGC_MAXGAIN 5.0f // Maximum microphone gain during compression -#define TX_AGC_NOISEGATE 0.00001f // Minimum signal level for amplification (below - noise, cut off) -#define AUTOGAIN_TARGET_AMPLITUDE 20000.0f // maximum amplitude, upon reaching which the autocorrector of the input circuits terminates, and in case of overflow it reduces the gain -#define AUTOGAIN_MAX_AMPLITUDE 30000.0f // maximum amplitude, upon reaching which the autocorrector of the input circuits terminates, and in case of overflow it reduces the gain -#define AUTOGAIN_CORRECTOR_WAITSTEP 5 // waiting for the averaging of the results when the auto-corrector of the input circuits is running -#define KEY_HOLD_TIME 500 // time of long pressing of the keyboard button for triggering, ms -#define MAX_RF_POWER 7.0f // Maximum power (for meter scale) -#define SHOW_LOGO true // Show logo on boot (from images.h) -#define POWERDOWN_TIMEOUT 1000 // time of pressing the shutdown button, for operation, ms -#define USB_RESTART_TIMEOUT 5000 // time after which USB restart occurs if there are no packets -#define ENCODER_ACCELERATION 50 //acceleration rate if rotate -#define ENCODER_MIN_RATE_ACCELERATION 1.2f //encoder enable rounding if lower than value -#define TRX_MAX_SWR 5 //maximum SWR to enable protect (NOT IN TUNE MODE!) - -// select LCD and Touchpad, comment on others -//#define LCD_ILI9481 true -//#define LCD_HX8357B true -//#define LCD_HX8357C true -//#define LCD_R61581 true //untested -#define LCD_ILI9486 true - -//SPI Speed -#define SPI_FRONT_UNIT_PRESCALER SPI_BAUDRATEPRESCALER_8 -#define SPI_EEPROM_PRESCALER SPI_BAUDRATEPRESCALER_8 - -#define ADC_BITS 12 // ADC bit depth -#define FPGA_BUS_BITS 16 // bitness of data from FPGA -#define CODEC_BITS 16 // bitness of data in the audio codec -//#define FPGA_BUS_FULL_SCALE 65536 // maximum signal amplitude in the bus // powf (2, FPGA_BUS_BITS) -//#define FPGA_BUS_FULL_SCALE_POW ((float64_t)FPGA_BUS_FULL_SCALE * (float64_t)FPGA_BUS_FULL_SCALE) // maximum bus signal magnitude // (FPGA_BUS_FULL_SCALE * FPGA_BUS_FULL_SCALE) -#define CODEC_BITS_FULL_SCALE 65536 // maximum signal amplitude in the bus // powf (2, FPGA_BUS_BITS) -//#define CODEC_BITS_FULL_SCALE_POW ((float64_t)CODEC_BITS_FULL_SCALE * (float64_t)CODEC_BITS_FULL_SCALE) // maximum bus signal magnitude // (FPGA_BUS_FULL_SCALE * FPGA_BUS )_FULL_SCALE -//#define ADC_FULL_SCALE 65536 // maximum signal amplitude in the ADC // powf (2, ADC_BITS) -#define FLOAT_FULL_SCALE_POW 4 -#define USB_DEBUG_ENABLED true // allow using USB as a console -#define SWD_DEBUG_ENABLED false // enable SWD as a console -#define LCD_DEBUG_ENABLED false // enable LCD as a console -#define ADC_INPUT_IMPEDANCE 200.0f //50ohm -> 1:4 trans -#define ADC_RANGE 1.0f -#define ADC_DRIVER_GAIN_DB 20.0f //on 14mhz - -#define MAX_CALLSIGN_LENGTH 16 - -#define W25Q16_COMMAND_Write_Disable 0x04 -#define W25Q16_COMMAND_Write_Enable 0x06 -#define W25Q16_COMMAND_Erase_Chip 0xC7 -#define W25Q16_COMMAND_Sector_Erase 0x20 -#define W25Q16_COMMAND_32KBlock_Erase 0x52 -#define W25Q16_COMMAND_Page_Program 0x02 -#define W25Q16_COMMAND_Read_Data 0x03 -#define W25Q16_COMMAND_FastRead_Data 0x0B -#define W25Q16_COMMAND_Power_Down 0xB9 -#define W25Q16_COMMAND_Power_Up 0xAB -#define W25Q16_COMMAND_GetStatus 0x05 -#define W25Q16_COMMAND_WriteStatus 0x01 -#define W25Q16_SECTOR_SIZE 4096 -#define EEPROM_SECTOR_CALIBRATION 0 -#define EEPROM_SECTOR_SETTINGS 4 -#define EEPROM_REPEAT_TRYES 5 // command tryes - -typedef struct -{ - uint32_t Freq; - uint_fast8_t Mode; - uint_fast16_t HPF_Filter_Width; - uint_fast16_t LPF_Filter_Width; - bool AutoNotchFilter; - uint_fast16_t NotchFC; - bool AGC; -} VFO; - -// Save settings by band -typedef struct -{ - uint32_t Freq; - uint8_t Mode; - float32_t ATT_DB; - bool ATT; - bool ADC_Driver; - uint8_t FM_SQL_threshold; - bool AGC; - uint8_t AutoGain_Stage; -} BAND_SAVED_SETTINGS_TYPE; - -extern struct TRX_SETTINGS -{ - uint8_t flash_id; - //TRX - bool current_vfo; // false - A; true - B - VFO VFO_A; - VFO VFO_B; - bool Fast; - BAND_SAVED_SETTINGS_TYPE BANDS_SAVED_SETTINGS[BANDS_COUNT]; - float32_t ATT_DB; - uint8_t ATT_STEP; - bool ATT; - uint8_t RF_Power; - bool ShiftEnabled; - uint16_t SHIFT_INTERVAL; - bool TWO_SIGNAL_TUNE; - uint16_t FRQ_STEP; - uint16_t FRQ_FAST_STEP; - bool Debug_Console; - bool BandMapEnabled; - bool InputType_MIC; - bool InputType_LINE; - bool InputType_USB; - bool AutoGain; - bool Locked; - bool CLAR; - bool Encoder_Accelerate; - char CALLSIGN[MAX_CALLSIGN_LENGTH]; - bool Transverter_Enabled; - uint16_t Transverter_Offset_Mhz; - //AUDIO - uint8_t Volume; - uint8_t IF_Gain; - int8_t AGC_GAIN_TARGET; - uint8_t MIC_GAIN; - int8_t RX_EQ_LOW; - int8_t RX_EQ_MID; - int8_t RX_EQ_HIG; - int8_t MIC_EQ_LOW; - int8_t MIC_EQ_MID; - int8_t MIC_EQ_HIG; - uint8_t DNR_SNR_THRESHOLD; - uint8_t DNR_AVERAGE; - uint8_t DNR_MINIMAL; - uint8_t RX_AGC_SSB_speed; - uint8_t RX_AGC_CW_speed; - uint8_t TX_AGC_speed; - uint16_t CW_LPF_Filter; - uint16_t CW_HPF_Filter; - uint16_t SSB_LPF_Filter; - uint16_t SSB_HPF_Filter; - uint16_t AM_LPF_Filter; - uint16_t FM_LPF_Filter; - uint8_t FM_SQL_threshold; - bool Beeper; - //CW - uint16_t CW_GENERATOR_SHIFT_HZ; - uint16_t CW_Key_timeout; - uint16_t CW_SelfHear; - bool CW_KEYER; - uint16_t CW_KEYER_WPM; - bool CW_GaussFilter; - //SCREEN - uint8_t ColorThemeId; - bool FFT_Enabled; - uint8_t FFT_Zoom; - uint8_t FFT_Averaging; - uint8_t FFT_Window; - uint8_t FFT_Color; - bool FFT_Compressor; - int8_t FFT_Grid; - bool FFT_Background; - //ADC - bool ADC_Driver; - bool ADC_SHDN; - // - uint8_t csum; //check sum - uint8_t ENDBit; //end bit -} TRX; - -extern struct TRX_CALIBRATE -{ - uint8_t flash_id; //eeprom check - - bool ENCODER_INVERT; - bool ENCODER2_INVERT; - uint8_t ENCODER_DEBOUNCE; - uint8_t ENCODER2_DEBOUNCE; - uint8_t ENCODER_SLOW_RATE; - bool ENCODER_ON_FALLING; - uint8_t CIC_GAINER_val; - uint8_t CICFIR_GAINER_val; - uint8_t TXCICFIR_GAINER_val; - uint8_t DAC_GAINER_val; - uint8_t rf_out_power_lf; - uint8_t rf_out_power_hf_low; - uint8_t rf_out_power_hf; - uint8_t rf_out_power_hf_high; - uint8_t rf_out_power_vhf; - int16_t smeter_calibration; - float32_t swr_trans_rate; - - uint8_t csum; //check sum - uint8_t ENDBit; //end bit -} CALIBRATE; - -extern char version_string[19]; //1.2.3-yymmdd.hhmmss -extern volatile bool NeedSaveSettings; -extern volatile bool NeedSaveCalibration; -extern volatile bool EEPROM_Busy; -extern volatile bool LCD_inited; - -extern void InitSettings(void); -extern void LoadSettings(bool clear); -extern void LoadCalibration(bool clear); -extern void SaveSettings(void); -extern void SaveCalibration(void); -extern void SaveSettingsToEEPROM(void); -extern void BKPSRAM_Enable(void); -extern void BKPSRAM_Disable(void); -extern VFO *CurrentVFO(void); -extern VFO *SecondaryVFO(void); - -#endif diff --git a/Src/stm32f4xx_hal_msp.c b/Src/stm32f4xx_hal_msp.c deleted file mode 100644 index 9fa93bd..0000000 --- a/Src/stm32f4xx_hal_msp.c +++ /dev/null @@ -1,844 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * File Name : stm32f4xx_hal_msp.c - * Description : This file provides code for the MSP Initialization - * and de-Initialization codes. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2020 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -/* USER CODE BEGIN Includes */ - -/* USER CODE END Includes */ -extern DMA_HandleTypeDef hdma_spi3_tx; - -extern DMA_HandleTypeDef hdma_i2s3_ext_rx; - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN TD */ - -/* USER CODE END TD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN Define */ - -/* USER CODE END Define */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN Macro */ - -/* USER CODE END Macro */ - -/* Private variables ---------------------------------------------------------*/ -/* USER CODE BEGIN PV */ - -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -/* USER CODE BEGIN PFP */ - -/* USER CODE END PFP */ - -/* External functions --------------------------------------------------------*/ -/* USER CODE BEGIN ExternalFunctions */ - -/* USER CODE END ExternalFunctions */ - -/* USER CODE BEGIN 0 */ - -/* USER CODE END 0 */ -/** - * Initializes the Global MSP. - */ -void HAL_MspInit(void) -{ - /* USER CODE BEGIN MspInit 0 */ - - /* USER CODE END MspInit 0 */ - - __HAL_RCC_SYSCFG_CLK_ENABLE(); - __HAL_RCC_PWR_CLK_ENABLE(); - - /* System interrupt init*/ - - /* USER CODE BEGIN MspInit 1 */ - - /* USER CODE END MspInit 1 */ -} - -/** -* @brief ADC MSP Initialization -* This function configures the hardware resources used in this example -* @param hadc: ADC handle pointer -* @retval None -*/ -void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; - if(hadc->Instance==ADC1) - { - /* USER CODE BEGIN ADC1_MspInit 0 */ - - /* USER CODE END ADC1_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_ADC1_CLK_ENABLE(); - - __HAL_RCC_GPIOC_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - /**ADC1 GPIO Configuration - PC0 ------> ADC1_IN10 - PC1 ------> ADC1_IN11 - PB0 ------> ADC1_IN8 - PB1 ------> ADC1_IN9 - */ - GPIO_InitStruct.Pin = SWR_FORW_Pin|SWR_BACKW_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; - GPIO_InitStruct.Pull = GPIO_NOPULL; - HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - - GPIO_InitStruct.Pin = PTT_SW1_Pin|PTT_SW2_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; - GPIO_InitStruct.Pull = GPIO_NOPULL; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - - /* USER CODE BEGIN ADC1_MspInit 1 */ - - /* USER CODE END ADC1_MspInit 1 */ - } - else if(hadc->Instance==ADC2) - { - /* USER CODE BEGIN ADC2_MspInit 0 */ - - /* USER CODE END ADC2_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_ADC2_CLK_ENABLE(); - - __HAL_RCC_GPIOC_CLK_ENABLE(); - /**ADC2 GPIO Configuration - PC4 ------> ADC2_IN14 - PC5 ------> ADC2_IN15 - */ - GPIO_InitStruct.Pin = Power_IN_Pin|ALC_IN_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; - GPIO_InitStruct.Pull = GPIO_NOPULL; - HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - - /* USER CODE BEGIN ADC2_MspInit 1 */ - - /* USER CODE END ADC2_MspInit 1 */ - } - -} - -/** -* @brief ADC MSP De-Initialization -* This function freeze the hardware resources used in this example -* @param hadc: ADC handle pointer -* @retval None -*/ -void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc) -{ - if(hadc->Instance==ADC1) - { - /* USER CODE BEGIN ADC1_MspDeInit 0 */ - - /* USER CODE END ADC1_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_ADC1_CLK_DISABLE(); - - /**ADC1 GPIO Configuration - PC0 ------> ADC1_IN10 - PC1 ------> ADC1_IN11 - PB0 ------> ADC1_IN8 - PB1 ------> ADC1_IN9 - */ - HAL_GPIO_DeInit(GPIOC, SWR_FORW_Pin|SWR_BACKW_Pin); - - HAL_GPIO_DeInit(GPIOB, PTT_SW1_Pin|PTT_SW2_Pin); - - /* USER CODE BEGIN ADC1_MspDeInit 1 */ - - /* USER CODE END ADC1_MspDeInit 1 */ - } - else if(hadc->Instance==ADC2) - { - /* USER CODE BEGIN ADC2_MspDeInit 0 */ - - /* USER CODE END ADC2_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_ADC2_CLK_DISABLE(); - - /**ADC2 GPIO Configuration - PC4 ------> ADC2_IN14 - PC5 ------> ADC2_IN15 - */ - HAL_GPIO_DeInit(GPIOC, Power_IN_Pin|ALC_IN_Pin); - - /* USER CODE BEGIN ADC2_MspDeInit 1 */ - - /* USER CODE END ADC2_MspDeInit 1 */ - } - -} - -/** -* @brief I2S MSP Initialization -* This function configures the hardware resources used in this example -* @param hi2s: I2S handle pointer -* @retval None -*/ -void HAL_I2S_MspInit(I2S_HandleTypeDef* hi2s) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; - if(hi2s->Instance==SPI3) - { - /* USER CODE BEGIN SPI3_MspInit 0 */ - - /* BUG FIX: Enabling Audio Clock Input in CubeMX does not set I2SSRC bit - * in RCC_CFGR register! Hence we need to set it manually here! * WARNING: A bug fix is also needed in __HAL_RCC_GET_I2S_SOURCE() - Line 6131 stm32f4xx_hal_rcc_ex.h -> #define __HAL_RCC_GET_I2S_SOURCE() ((uint32_t)(READ_BIT(RCC->CFGR, RCC_CFGR_I2SSRC)) >> RCC_CFGR_I2SSRC_Pos) - */ - __HAL_RCC_I2S_CONFIG(RCC_I2SCLKSOURCE_EXT); - /* USER CODE END SPI3_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_SPI3_CLK_ENABLE(); - - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOC_CLK_ENABLE(); - /**I2S3 GPIO Configuration - PA15 ------> I2S3_WS - PC10 ------> I2S3_CK - PC11 ------> I2S3_ext_SD - PC12 ------> I2S3_SD - */ - GPIO_InitStruct.Pin = WM8731_WS_LRC_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_PULLUP; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.Alternate = GPIO_AF6_SPI3; - HAL_GPIO_Init(WM8731_WS_LRC_GPIO_Port, &GPIO_InitStruct); - - GPIO_InitStruct.Pin = WM8731_BCLK_Pin|WM8731_DAC_SD_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_PULLUP; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.Alternate = GPIO_AF6_SPI3; - HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - - GPIO_InitStruct.Pin = WM8731_ADC_SD_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_PULLUP; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.Alternate = GPIO_AF5_I2S3ext; - HAL_GPIO_Init(WM8731_ADC_SD_GPIO_Port, &GPIO_InitStruct); - - /* I2S3 DMA Init */ - /* SPI3_TX Init */ - hdma_spi3_tx.Instance = DMA1_Stream5; - hdma_spi3_tx.Init.Channel = DMA_CHANNEL_0; - hdma_spi3_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; - hdma_spi3_tx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_spi3_tx.Init.MemInc = DMA_MINC_ENABLE; - hdma_spi3_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; - hdma_spi3_tx.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; - hdma_spi3_tx.Init.Mode = DMA_CIRCULAR; - hdma_spi3_tx.Init.Priority = DMA_PRIORITY_VERY_HIGH; - hdma_spi3_tx.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - hdma_spi3_tx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_spi3_tx.Init.MemBurst = DMA_MBURST_SINGLE; - hdma_spi3_tx.Init.PeriphBurst = DMA_PBURST_SINGLE; - if (HAL_DMA_Init(&hdma_spi3_tx) != HAL_OK) - { - Error_Handler(); - } - - __HAL_LINKDMA(hi2s,hdmatx,hdma_spi3_tx); - - /* I2S3_EXT_RX Init */ - hdma_i2s3_ext_rx.Instance = DMA1_Stream0; - hdma_i2s3_ext_rx.Init.Channel = DMA_CHANNEL_3; - hdma_i2s3_ext_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma_i2s3_ext_rx.Init.PeriphInc = DMA_PINC_DISABLE; - hdma_i2s3_ext_rx.Init.MemInc = DMA_MINC_ENABLE; - hdma_i2s3_ext_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; - hdma_i2s3_ext_rx.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; - hdma_i2s3_ext_rx.Init.Mode = DMA_CIRCULAR; - hdma_i2s3_ext_rx.Init.Priority = DMA_PRIORITY_VERY_HIGH; - hdma_i2s3_ext_rx.Init.FIFOMode = DMA_FIFOMODE_ENABLE; - hdma_i2s3_ext_rx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; - hdma_i2s3_ext_rx.Init.MemBurst = DMA_MBURST_SINGLE; - hdma_i2s3_ext_rx.Init.PeriphBurst = DMA_PBURST_SINGLE; - if (HAL_DMA_Init(&hdma_i2s3_ext_rx) != HAL_OK) - { - Error_Handler(); - } - - __HAL_LINKDMA(hi2s,hdmarx,hdma_i2s3_ext_rx); - - /* I2S3 interrupt Init */ - HAL_NVIC_SetPriority(SPI3_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(SPI3_IRQn); - /* USER CODE BEGIN SPI3_MspInit 1 */ - - /* USER CODE END SPI3_MspInit 1 */ - } - -} - -/** -* @brief I2S MSP De-Initialization -* This function freeze the hardware resources used in this example -* @param hi2s: I2S handle pointer -* @retval None -*/ -void HAL_I2S_MspDeInit(I2S_HandleTypeDef* hi2s) -{ - if(hi2s->Instance==SPI3) - { - /* USER CODE BEGIN SPI3_MspDeInit 0 */ - - /* USER CODE END SPI3_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_SPI3_CLK_DISABLE(); - - /**I2S3 GPIO Configuration - PA15 ------> I2S3_WS - PC10 ------> I2S3_CK - PC11 ------> I2S3_ext_SD - PC12 ------> I2S3_SD - */ - HAL_GPIO_DeInit(WM8731_WS_LRC_GPIO_Port, WM8731_WS_LRC_Pin); - - HAL_GPIO_DeInit(GPIOC, WM8731_BCLK_Pin|WM8731_ADC_SD_Pin|WM8731_DAC_SD_Pin); - - /* I2S3 DMA DeInit */ - HAL_DMA_DeInit(hi2s->hdmatx); - HAL_DMA_DeInit(hi2s->hdmarx); - - /* I2S3 interrupt DeInit */ - HAL_NVIC_DisableIRQ(SPI3_IRQn); - /* USER CODE BEGIN SPI3_MspDeInit 1 */ - - /* USER CODE END SPI3_MspDeInit 1 */ - } - -} - -/** -* @brief RTC MSP Initialization -* This function configures the hardware resources used in this example -* @param hrtc: RTC handle pointer -* @retval None -*/ -void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc) -{ - if(hrtc->Instance==RTC) - { - /* USER CODE BEGIN RTC_MspInit 0 */ - - /* USER CODE END RTC_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_RTC_ENABLE(); - /* USER CODE BEGIN RTC_MspInit 1 */ - - /* USER CODE END RTC_MspInit 1 */ - } - -} - -/** -* @brief RTC MSP De-Initialization -* This function freeze the hardware resources used in this example -* @param hrtc: RTC handle pointer -* @retval None -*/ -void HAL_RTC_MspDeInit(RTC_HandleTypeDef* hrtc) -{ - if(hrtc->Instance==RTC) - { - /* USER CODE BEGIN RTC_MspDeInit 0 */ - - /* USER CODE END RTC_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_RTC_DISABLE(); - /* USER CODE BEGIN RTC_MspDeInit 1 */ - - /* USER CODE END RTC_MspDeInit 1 */ - } - -} - -/** -* @brief SPI MSP Initialization -* This function configures the hardware resources used in this example -* @param hspi: SPI handle pointer -* @retval None -*/ -void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; - if(hspi->Instance==SPI2) - { - /* USER CODE BEGIN SPI2_MspInit 0 */ - - /* USER CODE END SPI2_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_SPI2_CLK_ENABLE(); - - __HAL_RCC_GPIOB_CLK_ENABLE(); - /**SPI2 GPIO Configuration - PB13 ------> SPI2_SCK - PB14 ------> SPI2_MISO - PB15 ------> SPI2_MOSI - */ - GPIO_InitStruct.Pin = PERI_SCK_Pin|PERI_MISO_Pin|PERI_MOSI_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_PULLUP; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF5_SPI2; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - - /* USER CODE BEGIN SPI2_MspInit 1 */ - - /* USER CODE END SPI2_MspInit 1 */ - } - -} - -/** -* @brief SPI MSP De-Initialization -* This function freeze the hardware resources used in this example -* @param hspi: SPI handle pointer -* @retval None -*/ -void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi) -{ - if(hspi->Instance==SPI2) - { - /* USER CODE BEGIN SPI2_MspDeInit 0 */ - - /* USER CODE END SPI2_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_SPI2_CLK_DISABLE(); - - /**SPI2 GPIO Configuration - PB13 ------> SPI2_SCK - PB14 ------> SPI2_MISO - PB15 ------> SPI2_MOSI - */ - HAL_GPIO_DeInit(GPIOB, PERI_SCK_Pin|PERI_MISO_Pin|PERI_MOSI_Pin); - - /* USER CODE BEGIN SPI2_MspDeInit 1 */ - - /* USER CODE END SPI2_MspDeInit 1 */ - } - -} - -/** -* @brief TIM_Base MSP Initialization -* This function configures the hardware resources used in this example -* @param htim_base: TIM_Base handle pointer -* @retval None -*/ -void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) -{ - if(htim_base->Instance==TIM3) - { - /* USER CODE BEGIN TIM3_MspInit 0 */ - - /* USER CODE END TIM3_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM3_CLK_ENABLE(); - /* TIM3 interrupt Init */ - HAL_NVIC_SetPriority(TIM3_IRQn, 2, 0); - HAL_NVIC_EnableIRQ(TIM3_IRQn); - /* USER CODE BEGIN TIM3_MspInit 1 */ - - /* USER CODE END TIM3_MspInit 1 */ - } - else if(htim_base->Instance==TIM4) - { - /* USER CODE BEGIN TIM4_MspInit 0 */ - - /* USER CODE END TIM4_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM4_CLK_ENABLE(); - /* TIM4 interrupt Init */ - HAL_NVIC_SetPriority(TIM4_IRQn, 9, 0); - HAL_NVIC_EnableIRQ(TIM4_IRQn); - /* USER CODE BEGIN TIM4_MspInit 1 */ - - /* USER CODE END TIM4_MspInit 1 */ - } - else if(htim_base->Instance==TIM5) - { - /* USER CODE BEGIN TIM5_MspInit 0 */ - - /* USER CODE END TIM5_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM5_CLK_ENABLE(); - /* TIM5 interrupt Init */ - HAL_NVIC_SetPriority(TIM5_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(TIM5_IRQn); - /* USER CODE BEGIN TIM5_MspInit 1 */ - - /* USER CODE END TIM5_MspInit 1 */ - } - else if(htim_base->Instance==TIM6) - { - /* USER CODE BEGIN TIM6_MspInit 0 */ - - /* USER CODE END TIM6_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM6_CLK_ENABLE(); - /* TIM6 interrupt Init */ - HAL_NVIC_SetPriority(TIM6_DAC_IRQn, 8, 0); - HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn); - /* USER CODE BEGIN TIM6_MspInit 1 */ - - /* USER CODE END TIM6_MspInit 1 */ - } - else if(htim_base->Instance==TIM7) - { - /* USER CODE BEGIN TIM7_MspInit 0 */ - - /* USER CODE END TIM7_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM7_CLK_ENABLE(); - /* TIM7 interrupt Init */ - HAL_NVIC_SetPriority(TIM7_IRQn, 11, 0); - HAL_NVIC_EnableIRQ(TIM7_IRQn); - /* USER CODE BEGIN TIM7_MspInit 1 */ - - /* USER CODE END TIM7_MspInit 1 */ - } - else if(htim_base->Instance==TIM8) - { - /* USER CODE BEGIN TIM8_MspInit 0 */ - - /* USER CODE END TIM8_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM8_CLK_ENABLE(); - /* TIM8 interrupt Init */ - HAL_NVIC_SetPriority(TIM8_UP_TIM13_IRQn, 10, 0); - HAL_NVIC_EnableIRQ(TIM8_UP_TIM13_IRQn); - /* USER CODE BEGIN TIM8_MspInit 1 */ - - /* USER CODE END TIM8_MspInit 1 */ - } - -} - -/** -* @brief TIM_Base MSP De-Initialization -* This function freeze the hardware resources used in this example -* @param htim_base: TIM_Base handle pointer -* @retval None -*/ -void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base) -{ - if(htim_base->Instance==TIM3) - { - /* USER CODE BEGIN TIM3_MspDeInit 0 */ - - /* USER CODE END TIM3_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM3_CLK_DISABLE(); - - /* TIM3 interrupt DeInit */ - HAL_NVIC_DisableIRQ(TIM3_IRQn); - /* USER CODE BEGIN TIM3_MspDeInit 1 */ - - /* USER CODE END TIM3_MspDeInit 1 */ - } - else if(htim_base->Instance==TIM4) - { - /* USER CODE BEGIN TIM4_MspDeInit 0 */ - - /* USER CODE END TIM4_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM4_CLK_DISABLE(); - - /* TIM4 interrupt DeInit */ - HAL_NVIC_DisableIRQ(TIM4_IRQn); - /* USER CODE BEGIN TIM4_MspDeInit 1 */ - - /* USER CODE END TIM4_MspDeInit 1 */ - } - else if(htim_base->Instance==TIM5) - { - /* USER CODE BEGIN TIM5_MspDeInit 0 */ - - /* USER CODE END TIM5_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM5_CLK_DISABLE(); - - /* TIM5 interrupt DeInit */ - HAL_NVIC_DisableIRQ(TIM5_IRQn); - /* USER CODE BEGIN TIM5_MspDeInit 1 */ - - /* USER CODE END TIM5_MspDeInit 1 */ - } - else if(htim_base->Instance==TIM6) - { - /* USER CODE BEGIN TIM6_MspDeInit 0 */ - - /* USER CODE END TIM6_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM6_CLK_DISABLE(); - - /* TIM6 interrupt DeInit */ - HAL_NVIC_DisableIRQ(TIM6_DAC_IRQn); - /* USER CODE BEGIN TIM6_MspDeInit 1 */ - - /* USER CODE END TIM6_MspDeInit 1 */ - } - else if(htim_base->Instance==TIM7) - { - /* USER CODE BEGIN TIM7_MspDeInit 0 */ - - /* USER CODE END TIM7_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM7_CLK_DISABLE(); - - /* TIM7 interrupt DeInit */ - HAL_NVIC_DisableIRQ(TIM7_IRQn); - /* USER CODE BEGIN TIM7_MspDeInit 1 */ - - /* USER CODE END TIM7_MspDeInit 1 */ - } - else if(htim_base->Instance==TIM8) - { - /* USER CODE BEGIN TIM8_MspDeInit 0 */ - - /* USER CODE END TIM8_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM8_CLK_DISABLE(); - - /* TIM8 interrupt DeInit */ - HAL_NVIC_DisableIRQ(TIM8_UP_TIM13_IRQn); - /* USER CODE BEGIN TIM8_MspDeInit 1 */ - - /* USER CODE END TIM8_MspDeInit 1 */ - } - -} - -/** -* @brief PCD MSP Initialization -* This function configures the hardware resources used in this example -* @param hpcd: PCD handle pointer -* @retval None -*/ -void HAL_PCD_MspInit(PCD_HandleTypeDef* hpcd) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; - if(hpcd->Instance==USB_OTG_FS) - { - /* USER CODE BEGIN USB_OTG_FS_MspInit 0 */ - - /* USER CODE END USB_OTG_FS_MspInit 0 */ - - __HAL_RCC_GPIOA_CLK_ENABLE(); - /**USB_OTG_FS GPIO Configuration - PA11 ------> USB_OTG_FS_DM - PA12 ------> USB_OTG_FS_DP - */ - GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF10_OTG_FS; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - - /* Peripheral clock enable */ - __HAL_RCC_USB_OTG_FS_CLK_ENABLE(); - /* USB_OTG_FS interrupt Init */ - HAL_NVIC_SetPriority(OTG_FS_IRQn, 1, 0); - HAL_NVIC_EnableIRQ(OTG_FS_IRQn); - /* USER CODE BEGIN USB_OTG_FS_MspInit 1 */ - - /* USER CODE END USB_OTG_FS_MspInit 1 */ - } - -} - -/** -* @brief PCD MSP De-Initialization -* This function freeze the hardware resources used in this example -* @param hpcd: PCD handle pointer -* @retval None -*/ -void HAL_PCD_MspDeInit(PCD_HandleTypeDef* hpcd) -{ - if(hpcd->Instance==USB_OTG_FS) - { - /* USER CODE BEGIN USB_OTG_FS_MspDeInit 0 */ - - /* USER CODE END USB_OTG_FS_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_USB_OTG_FS_CLK_DISABLE(); - - /**USB_OTG_FS GPIO Configuration - PA11 ------> USB_OTG_FS_DM - PA12 ------> USB_OTG_FS_DP - */ - HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11|GPIO_PIN_12); - - /* USB_OTG_FS interrupt DeInit */ - HAL_NVIC_DisableIRQ(OTG_FS_IRQn); - /* USER CODE BEGIN USB_OTG_FS_MspDeInit 1 */ - - /* USER CODE END USB_OTG_FS_MspDeInit 1 */ - } - -} - -static uint32_t FSMC_Initialized = 0; - -static void HAL_FSMC_MspInit(void){ - /* USER CODE BEGIN FSMC_MspInit 0 */ - - /* USER CODE END FSMC_MspInit 0 */ - GPIO_InitTypeDef GPIO_InitStruct ={0}; - if (FSMC_Initialized) { - return; - } - FSMC_Initialized = 1; - - /* Peripheral clock enable */ - __HAL_RCC_FSMC_CLK_ENABLE(); - - /** FSMC GPIO Configuration - PE7 ------> FSMC_D4 - PE8 ------> FSMC_D5 - PE9 ------> FSMC_D6 - PE10 ------> FSMC_D7 - PE11 ------> FSMC_D8 - PE12 ------> FSMC_D9 - PE13 ------> FSMC_D10 - PE14 ------> FSMC_D11 - PE15 ------> FSMC_D12 - PD8 ------> FSMC_D13 - PD9 ------> FSMC_D14 - PD10 ------> FSMC_D15 - PD13 ------> FSMC_A18 - PD14 ------> FSMC_D0 - PD15 ------> FSMC_D1 - PD0 ------> FSMC_D2 - PD1 ------> FSMC_D3 - PD4 ------> FSMC_NOE - PD5 ------> FSMC_NWE - PD7 ------> FSMC_NE1 - */ - GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10 - |GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14 - |GPIO_PIN_15; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF12_FSMC; - HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); - - GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_13 - |GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1 - |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_7; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF12_FSMC; - HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - - /* USER CODE BEGIN FSMC_MspInit 1 */ - - /* USER CODE END FSMC_MspInit 1 */ -} - -void HAL_SRAM_MspInit(SRAM_HandleTypeDef* hsram){ - /* USER CODE BEGIN SRAM_MspInit 0 */ - - /* USER CODE END SRAM_MspInit 0 */ - HAL_FSMC_MspInit(); - /* USER CODE BEGIN SRAM_MspInit 1 */ - - /* USER CODE END SRAM_MspInit 1 */ -} - -static uint32_t FSMC_DeInitialized = 0; - -static void HAL_FSMC_MspDeInit(void){ - /* USER CODE BEGIN FSMC_MspDeInit 0 */ - - /* USER CODE END FSMC_MspDeInit 0 */ - if (FSMC_DeInitialized) { - return; - } - FSMC_DeInitialized = 1; - /* Peripheral clock enable */ - __HAL_RCC_FSMC_CLK_DISABLE(); - - /** FSMC GPIO Configuration - PE7 ------> FSMC_D4 - PE8 ------> FSMC_D5 - PE9 ------> FSMC_D6 - PE10 ------> FSMC_D7 - PE11 ------> FSMC_D8 - PE12 ------> FSMC_D9 - PE13 ------> FSMC_D10 - PE14 ------> FSMC_D11 - PE15 ------> FSMC_D12 - PD8 ------> FSMC_D13 - PD9 ------> FSMC_D14 - PD10 ------> FSMC_D15 - PD13 ------> FSMC_A18 - PD14 ------> FSMC_D0 - PD15 ------> FSMC_D1 - PD0 ------> FSMC_D2 - PD1 ------> FSMC_D3 - PD4 ------> FSMC_NOE - PD5 ------> FSMC_NWE - PD7 ------> FSMC_NE1 - */ - HAL_GPIO_DeInit(GPIOE, GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10 - |GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14 - |GPIO_PIN_15); - - HAL_GPIO_DeInit(GPIOD, GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_13 - |GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1 - |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_7); - - /* USER CODE BEGIN FSMC_MspDeInit 1 */ - - /* USER CODE END FSMC_MspDeInit 1 */ -} - -void HAL_SRAM_MspDeInit(SRAM_HandleTypeDef* hsram){ - /* USER CODE BEGIN SRAM_MspDeInit 0 */ - - /* USER CODE END SRAM_MspDeInit 0 */ - HAL_FSMC_MspDeInit(); - /* USER CODE BEGIN SRAM_MspDeInit 1 */ - - /* USER CODE END SRAM_MspDeInit 1 */ -} - -/* USER CODE BEGIN 1 */ - -/* USER CODE END 1 */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Src/stm32f4xx_it.c b/Src/stm32f4xx_it.c deleted file mode 100644 index 3ed40f6..0000000 --- a/Src/stm32f4xx_it.c +++ /dev/null @@ -1,866 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file stm32f4xx_it.c - * @brief Interrupt Service Routines. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2020 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -// EXTI0 - KEY DASH -// EXTI1 - KEY DOT -// EXTI2 - ENC_CLK -// EXTI4 - PTT_IN -// EXTI10 - 48K_Clock -// EXTI11 - PWR_button -// EXTI13 - ENC2_CLK - -// TIM3 - WIFI -// TIM4 - FFT calculation -// TIM5 - audio processor -// TIM6 - every 10ms, different actions -// TIM7 - USB FIFO -// TIM15 - EEPROM / front panel -// TIM16 - Interrogation of the auxiliary encoder, because it hangs on the same interrupt as the FPGA -// TIM17 - Digital CW decoding, ... - -// DMA1-0 - receiving data from the audio codec -// DMA1-1 - receiving data from WiFi via UART -// DMA1-5 - sending data to audio codec -// DMA2-4 - DMA for copying 16 bit arrays -// DMA2-5 - draw the fft at 16 bits, increment -// DMA2-6 - draw the waterfall at 16 bits, increment -// DMA2-7 - move the waterfall down - -// DMA2-0 - copy audio buffers at 32bit -// DMA2-1 - send audio processor buffer to codec buffer - A -// DMA2-2 - send audio processor buffer to codec buffer - B -// DMA2-3 - DMA video driver, for filling, 16 bits without increment - -/* USER CODE END Header */ - -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "stm32f4xx_it.h" -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN TD */ - -/* USER CODE END TD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ - -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ - -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -/* USER CODE BEGIN PV */ - -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -/* USER CODE BEGIN PFP */ - -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ -#include "functions.h" -#include "front_unit.h" -#include "rf_unit.h" -#include "fpga.h" -#include "lcd.h" -#include "wm8731.h" -#include "audio_processor.h" -#include "agc.h" -#include "fft.h" -#include "settings.h" -#include "fpga.h" -#include "profiler.h" -#include "usbd_debug_if.h" -#include "usbd_cat_if.h" -#include "usbd_audio_if.h" -#include "usbd_ua3reo.h" -#include "trx_manager.h" -#include "audio_filters.h" -#include "system_menu.h" -#include "bootloader.h" -#include "swr_analyzer.h" - -static uint32_t ms10_counter = 0; -static uint32_t tim6_delay = 0; -static uint32_t powerdown_start_delay = 0; -/* USER CODE END 0 */ - -/* External variables --------------------------------------------------------*/ -extern DMA_HandleTypeDef hdma_memtomem_dma2_stream7; -extern DMA_HandleTypeDef hdma_memtomem_dma2_stream6; -extern DMA_HandleTypeDef hdma_memtomem_dma2_stream4; -extern DMA_HandleTypeDef hdma_memtomem_dma2_stream1; -extern DMA_HandleTypeDef hdma_memtomem_dma2_stream0; -extern DMA_HandleTypeDef hdma_memtomem_dma2_stream2; -extern DMA_HandleTypeDef hdma_memtomem_dma2_stream3; -extern DMA_HandleTypeDef hdma_memtomem_dma2_stream5; -extern DMA_HandleTypeDef hdma_spi3_tx; -extern DMA_HandleTypeDef hdma_i2s3_ext_rx; -extern I2S_HandleTypeDef hi2s3; -extern TIM_HandleTypeDef htim3; -extern TIM_HandleTypeDef htim4; -extern TIM_HandleTypeDef htim5; -extern TIM_HandleTypeDef htim6; -extern TIM_HandleTypeDef htim7; -extern TIM_HandleTypeDef htim8; -extern PCD_HandleTypeDef hpcd_USB_OTG_FS; -/* USER CODE BEGIN EV */ - -/* USER CODE END EV */ - -/******************************************************************************/ -/* Cortex-M4 Processor Interruption and Exception Handlers */ -/******************************************************************************/ -/** - * @brief This function handles Non maskable interrupt. - */ -void NMI_Handler(void) -{ - /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ - CPULOAD_WakeUp(); - /* USER CODE END NonMaskableInt_IRQn 0 */ - /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ - - /* USER CODE END NonMaskableInt_IRQn 1 */ -} - -/** - * @brief This function handles Hard fault interrupt. - */ -void HardFault_Handler(void) -{ - /* USER CODE BEGIN HardFault_IRQn 0 */ - CPULOAD_WakeUp(); - /* USER CODE END HardFault_IRQn 0 */ - while (1) - { - /* USER CODE BEGIN W1_HardFault_IRQn 0 */ - LCD_showError("Hard Fault", false); - static uint32_t i = 0; while(i < 99999999) { i++; __asm("nop"); } - HAL_GPIO_WritePin(CPU_PW_HOLD_GPIO_Port, CPU_PW_HOLD_Pin, GPIO_PIN_RESET); - /* USER CODE END W1_HardFault_IRQn 0 */ - } -} - -/** - * @brief This function handles Memory management fault. - */ -void MemManage_Handler(void) -{ - /* USER CODE BEGIN MemoryManagement_IRQn 0 */ - CPULOAD_WakeUp(); - /* USER CODE END MemoryManagement_IRQn 0 */ - while (1) - { - /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */ - LCD_showError("Memory Fault", false); - static uint32_t i = 0; while(i < 99999999) { i++; __asm("nop"); } - HAL_GPIO_WritePin(CPU_PW_HOLD_GPIO_Port, CPU_PW_HOLD_Pin, GPIO_PIN_RESET); - /* USER CODE END W1_MemoryManagement_IRQn 0 */ - } -} - -/** - * @brief This function handles Pre-fetch fault, memory access fault. - */ -void BusFault_Handler(void) -{ - /* USER CODE BEGIN BusFault_IRQn 0 */ - CPULOAD_WakeUp(); - /* USER CODE END BusFault_IRQn 0 */ - while (1) - { - /* USER CODE BEGIN W1_BusFault_IRQn 0 */ - LCD_showError("Bus Fault", false); - static uint32_t i = 0; while(i < 99999999) { i++; __asm("nop"); } - HAL_GPIO_WritePin(CPU_PW_HOLD_GPIO_Port, CPU_PW_HOLD_Pin, GPIO_PIN_RESET); - /* USER CODE END W1_BusFault_IRQn 0 */ - } -} - -/** - * @brief This function handles Undefined instruction or illegal state. - */ -void UsageFault_Handler(void) -{ - /* USER CODE BEGIN UsageFault_IRQn 0 */ - CPULOAD_WakeUp(); - /* USER CODE END UsageFault_IRQn 0 */ - while (1) - { - /* USER CODE BEGIN W1_UsageFault_IRQn 0 */ - LCD_showError("Usage Fault", false); - static uint32_t i = 0; while(i < 99999999) { i++; __asm("nop"); } - HAL_GPIO_WritePin(CPU_PW_HOLD_GPIO_Port, CPU_PW_HOLD_Pin, GPIO_PIN_RESET); - /* USER CODE END W1_UsageFault_IRQn 0 */ - } -} - -/** - * @brief This function handles System service call via SWI instruction. - */ -void SVC_Handler(void) -{ - /* USER CODE BEGIN SVCall_IRQn 0 */ - CPULOAD_WakeUp(); - /* USER CODE END SVCall_IRQn 0 */ - /* USER CODE BEGIN SVCall_IRQn 1 */ - - /* USER CODE END SVCall_IRQn 1 */ -} - -/** - * @brief This function handles Debug monitor. - */ -void DebugMon_Handler(void) -{ - /* USER CODE BEGIN DebugMonitor_IRQn 0 */ - CPULOAD_WakeUp(); - /* USER CODE END DebugMonitor_IRQn 0 */ - /* USER CODE BEGIN DebugMonitor_IRQn 1 */ - - /* USER CODE END DebugMonitor_IRQn 1 */ -} - -/** - * @brief This function handles Pendable request for system service. - */ -void PendSV_Handler(void) -{ - /* USER CODE BEGIN PendSV_IRQn 0 */ - CPULOAD_WakeUp(); - /* USER CODE END PendSV_IRQn 0 */ - /* USER CODE BEGIN PendSV_IRQn 1 */ - - /* USER CODE END PendSV_IRQn 1 */ -} - -/** - * @brief This function handles System tick timer. - */ -void SysTick_Handler(void) -{ - /* USER CODE BEGIN SysTick_IRQn 0 */ - CPULOAD_WakeUp(); - /* USER CODE END SysTick_IRQn 0 */ - HAL_IncTick(); - /* USER CODE BEGIN SysTick_IRQn 1 */ - - /* USER CODE END SysTick_IRQn 1 */ -} - -/******************************************************************************/ -/* STM32F4xx Peripheral Interrupt Handlers */ -/* Add here the Interrupt Handlers for the used peripherals. */ -/* For the available peripheral interrupt handler names, */ -/* please refer to the startup file (startup_stm32f4xx.s). */ -/******************************************************************************/ - -/** - * @brief This function handles EXTI line0 interrupt. - */ -void EXTI0_IRQHandler(void) -{ - /* USER CODE BEGIN EXTI0_IRQn 0 */ - CPULOAD_WakeUp(); - /* USER CODE END EXTI0_IRQn 0 */ - HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0); - /* USER CODE BEGIN EXTI0_IRQn 1 */ - - /* USER CODE END EXTI0_IRQn 1 */ -} - -/** - * @brief This function handles EXTI line1 interrupt. - */ -void EXTI1_IRQHandler(void) -{ - /* USER CODE BEGIN EXTI1_IRQn 0 */ - CPULOAD_WakeUp(); - /* USER CODE END EXTI1_IRQn 0 */ - HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_1); - /* USER CODE BEGIN EXTI1_IRQn 1 */ - - /* USER CODE END EXTI1_IRQn 1 */ -} - -/** - * @brief This function handles EXTI line2 interrupt. - */ -void EXTI2_IRQHandler(void) -{ - /* USER CODE BEGIN EXTI2_IRQn 0 */ - CPULOAD_WakeUp(); - /* USER CODE END EXTI2_IRQn 0 */ - HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_2); - /* USER CODE BEGIN EXTI2_IRQn 1 */ - - /* USER CODE END EXTI2_IRQn 1 */ -} - -/** - * @brief This function handles EXTI line3 interrupt. - */ -void EXTI3_IRQHandler(void) -{ - /* USER CODE BEGIN EXTI3_IRQn 0 */ - CPULOAD_WakeUp(); - /* USER CODE END EXTI3_IRQn 0 */ - HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3); - /* USER CODE BEGIN EXTI3_IRQn 1 */ - - /* USER CODE END EXTI3_IRQn 1 */ -} - -/** - * @brief This function handles DMA1 stream0 global interrupt. - */ -void DMA1_Stream0_IRQHandler(void) -{ - /* USER CODE BEGIN DMA1_Stream0_IRQn 0 */ - CPULOAD_WakeUp(); - /* USER CODE END DMA1_Stream0_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_i2s3_ext_rx); - /* USER CODE BEGIN DMA1_Stream0_IRQn 1 */ - - /* USER CODE END DMA1_Stream0_IRQn 1 */ -} - -/** - * @brief This function handles DMA1 stream5 global interrupt. - */ -void DMA1_Stream5_IRQHandler(void) -{ - /* USER CODE BEGIN DMA1_Stream5_IRQn 0 */ - CPULOAD_WakeUp(); - /* USER CODE END DMA1_Stream5_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_spi3_tx); - /* USER CODE BEGIN DMA1_Stream5_IRQn 1 */ - - /* USER CODE END DMA1_Stream5_IRQn 1 */ -} - -/** - * @brief This function handles EXTI line[9:5] interrupts. - */ -void EXTI9_5_IRQHandler(void) -{ - /* USER CODE BEGIN EXTI9_5_IRQn 0 */ - CPULOAD_WakeUp(); - /* USER CODE END EXTI9_5_IRQn 0 */ - HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_7); - /* USER CODE BEGIN EXTI9_5_IRQn 1 */ - - /* USER CODE END EXTI9_5_IRQn 1 */ -} - -/** - * @brief This function handles TIM3 global interrupt. - */ -void TIM3_IRQHandler(void) -{ - /* USER CODE BEGIN TIM3_IRQn 0 */ - CPULOAD_WakeUp(); - /* USER CODE END TIM3_IRQn 0 */ - HAL_TIM_IRQHandler(&htim3); - /* USER CODE BEGIN TIM3_IRQn 1 */ - static uint8_t ENC2lastClkVal = 0; - static bool ENC2first = true; - uint8_t ENCODER2_CLKVal = HAL_GPIO_ReadPin(ENC2_CLK_GPIO_Port, ENC2_CLK_Pin); - if (ENC2first) - { - ENC2lastClkVal = ENCODER2_CLKVal; - ENC2first = false; - } - if(ENC2lastClkVal != ENCODER2_CLKVal) - { - if (TRX_Inited) - FRONTPANEL_ENCODER2_checkRotate(); - ENC2lastClkVal = ENCODER2_CLKVal; - } - /* USER CODE END TIM3_IRQn 1 */ -} - -/** - * @brief This function handles TIM4 global interrupt. - */ -void TIM4_IRQHandler(void) -{ - /* USER CODE BEGIN TIM4_IRQn 0 */ - CPULOAD_WakeUp(); - /* USER CODE END TIM4_IRQn 0 */ - HAL_TIM_IRQHandler(&htim4); - /* USER CODE BEGIN TIM4_IRQn 1 */ - if (sysmenu_swr_opened) - { - SYSMENU_drawSystemMenu(false); - return; - } - - if (FFT_new_buffer_ready) - FFT_bufferPrepare(); - - if (FFT_need_fft) - FFT_doFFT(); - - ua3reo_dev_cat_parseCommand(); - /* USER CODE END TIM4_IRQn 1 */ -} - -/** - * @brief This function handles EXTI line[15:10] interrupts. - */ -void EXTI15_10_IRQHandler(void) -{ - /* USER CODE BEGIN EXTI15_10_IRQn 0 */ - CPULOAD_WakeUp(); - /* USER CODE END EXTI15_10_IRQn 0 */ - HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_10); - /* USER CODE BEGIN EXTI15_10_IRQn 1 */ - - /* USER CODE END EXTI15_10_IRQn 1 */ -} - -/** - * @brief This function handles TIM8 update interrupt and TIM13 global interrupt. - */ -void TIM8_UP_TIM13_IRQHandler(void) -{ - /* USER CODE BEGIN TIM8_UP_TIM13_IRQn 0 */ - CPULOAD_WakeUp(); - /* USER CODE END TIM8_UP_TIM13_IRQn 0 */ - HAL_TIM_IRQHandler(&htim8); - /* USER CODE BEGIN TIM8_UP_TIM13_IRQn 1 */ - //FRONT PANEL SPI - FRONTPANEL_Process(); - - //EEPROM SPI - if (NeedSaveCalibration) // save calibration data to EEPROM - SaveCalibration(); - /* USER CODE END TIM8_UP_TIM13_IRQn 1 */ -} - -/** - * @brief This function handles TIM5 global interrupt. - */ -void TIM5_IRQHandler(void) -{ - /* USER CODE BEGIN TIM5_IRQn 0 */ - CPULOAD_WakeUp(); - /* USER CODE END TIM5_IRQn 0 */ - HAL_TIM_IRQHandler(&htim5); - /* USER CODE BEGIN TIM5_IRQn 1 */ - if (!Processor_NeedTXBuffer && !Processor_NeedRXBuffer) - return; - - if (TRX_on_TX()) - { - if (CurrentVFO()->Mode != TRX_MODE_NO_TX) - processTxAudio(); - } - else - { - processRxAudio(); - } - /* USER CODE END TIM5_IRQn 1 */ -} - -/** - * @brief This function handles SPI3 global interrupt. - */ -void SPI3_IRQHandler(void) -{ - /* USER CODE BEGIN SPI3_IRQn 0 */ - CPULOAD_WakeUp(); - /* USER CODE END SPI3_IRQn 0 */ - HAL_I2S_IRQHandler(&hi2s3); - /* USER CODE BEGIN SPI3_IRQn 1 */ - - /* USER CODE END SPI3_IRQn 1 */ -} - -/** - * @brief This function handles TIM6 global interrupt, DAC1 and DAC2 underrun error interrupts. - */ -void TIM6_DAC_IRQHandler(void) -{ - /* USER CODE BEGIN TIM6_DAC_IRQn 0 */ - CPULOAD_WakeUp(); - /* USER CODE END TIM6_DAC_IRQn 0 */ - HAL_TIM_IRQHandler(&htim6); - /* USER CODE BEGIN TIM6_DAC_IRQn 1 */ - - ms10_counter++; - // transmission release time after key signal - if (TRX_Key_Timeout_est > 0 && !TRX_key_serial && !TRX_key_dot_hard && !TRX_key_dash_hard) - { - TRX_Key_Timeout_est -= 10; - if (TRX_Key_Timeout_est == 0) - { - LCD_UpdateQuery.StatusInfoGUI = true; - FPGA_NeedSendParams = true; - TRX_Restart_Mode(); - } - } - - //every 10ms - - // if the settings have changed, update the parameters in the FPGA - if (NeedSaveSettings) - FPGA_NeedSendParams = true; - - // there was a request to reinitialize audio filters - if (NeedReinitAudioFilters) - ReinitAudioFilters(); - - //Process SWR, Power meter, ALC, Thermal sensors, Fan, ... - RF_UNIT_ProcessSensors(); - - // emulate PTT over CAT - if (TRX_ptt_soft != TRX_old_ptt_soft) - TRX_ptt_change(); - - // emulate the key via the COM port - if (TRX_key_serial != TRX_old_key_serial) - TRX_key_change(); - - if ((ms10_counter % 10) == 0) // every 100ms - { - // every 100ms we receive data from FPGA (amplitude, ADC overload, etc.) - FPGA_NeedGetParams = true; - - //S-Meter Calculate - TRX_DBMCalculate(); - - //Detect FPGA stuck error - static float32_t old_FPGA_Audio_Buffer_RX_I = 0; - static float32_t old_FPGA_Audio_Buffer_RX_Q = 0; - static uint16_t fpga_stuck_errors = 0; - if(FPGA_Audio_Buffer_RX_I[0] == old_FPGA_Audio_Buffer_RX_I || FPGA_Audio_Buffer_RX_Q[0] == old_FPGA_Audio_Buffer_RX_Q) - fpga_stuck_errors++; - else - fpga_stuck_errors=0; - if(fpga_stuck_errors>3 && !TRX_on_TX() && !TRX.ADC_SHDN) - { - /*sendToDebug_strln("[ERR] IQ stuck error, restart"); - sendToDebug_float32(old_FPGA_Audio_Buffer_RX_I, false); - sendToDebug_float32(old_FPGA_Audio_Buffer_RX_Q, false);*/ - fpga_stuck_errors=0; - FPGA_NeedRestart = true; - } - old_FPGA_Audio_Buffer_RX_I = FPGA_Audio_Buffer_RX_I[0]; - old_FPGA_Audio_Buffer_RX_Q = FPGA_Audio_Buffer_RX_Q[0]; - - //Process AutoGain feature - TRX_DoAutoGain(); - - // reset error flags - WM8731_Buffer_underrun = false; - FPGA_Buffer_underrun = false; - RX_USB_AUDIO_underrun = false; - } - - static bool needPrintFFT = false; - if ((ms10_counter % 3) == 0) // every 30ms - { - // update information on LCD - LCD_UpdateQuery.StatusInfoBar = true; - LCD_doEvents(); - - // draw FFT - needPrintFFT = true; - } - else if(LCD_UpdateQuery.FreqInfo)//Redraw freq fast - LCD_doEvents(); - - if(needPrintFFT && !LCD_UpdateQuery.Background && FFT_printFFT()) // draw FFT - needPrintFFT = false; - - if (ms10_counter == 101) // every 1 sec - { - ms10_counter = 0; - - //Detect FPGA IQ phase error - /*static bool phase_restarted = false; - if ((TRX_IQ_phase_error < 0.01f || TRX_IQ_phase_error > 0.08f) && !TRX_on_TX() && !phase_restarted && !TRX.ADC_SHDN) - { - sendToDebug_str("[ERR] IQ phase error, restart | "); - sendToDebug_float32(TRX_IQ_phase_error, false); - FPGA_NeedRestart = true; - phase_restarted = true; - }*/ - - // Calculate CPU load - CPULOAD_Calc(); - - if (TRX.Debug_Console) - { - //Save Debug variables - uint32_t dbg_tim6_delay = HAL_GetTick() - tim6_delay; - float32_t dbg_coeff = 1000.0f / (float32_t)dbg_tim6_delay; - uint32_t dbg_FPGA_samples = (uint32_t)((float32_t)FPGA_samples * dbg_coeff); - uint32_t dbg_WM8731_DMA_samples = (uint32_t)((float32_t)WM8731_DMA_samples / 2.0f * dbg_coeff); - float32_t dbg_FPGA_Audio_Buffer_I_tmp = FPGA_Audio_Buffer_RX_I[0]; - float32_t dbg_FPGA_Audio_Buffer_Q_tmp = FPGA_Audio_Buffer_RX_Q[0]; - if (TRX_on_TX()) - { - dbg_FPGA_Audio_Buffer_I_tmp = FPGA_Audio_SendBuffer_I[0]; - dbg_FPGA_Audio_Buffer_Q_tmp = FPGA_Audio_SendBuffer_Q[0]; - } - uint32_t cpu_load = (uint32_t)CPU_LOAD.Load; - //Print Debug info - sendToDebug_str("FPGA Samples: "); - sendToDebug_uint32(dbg_FPGA_samples, false); //~96000 - sendToDebug_str("Audio DMA samples: "); - sendToDebug_uint32(dbg_WM8731_DMA_samples, false); //~48000 - sendToDebug_str("CPU Load: "); - sendToDebug_uint32(cpu_load, false); - sendToDebug_str("TIM6 delay: "); - sendToDebug_uint32(dbg_tim6_delay, false); - sendToDebug_str("First byte of RX-FPGA I/Q: "); - sendToDebug_float32(dbg_FPGA_Audio_Buffer_I_tmp, true); //first byte of I - sendToDebug_str(" / "); - sendToDebug_float32(dbg_FPGA_Audio_Buffer_Q_tmp, false); //first byte of Q - sendToDebug_str("IQ Phase error: "); - sendToDebug_float32(TRX_IQ_phase_error, false); //first byte of Q - sendToDebug_str("ADC MIN/MAX Amplitude: "); - sendToDebug_int16(TRX_ADC_MINAMPLITUDE, true); - sendToDebug_str(" / "); - sendToDebug_int16(TRX_ADC_MAXAMPLITUDE, false); - sendToDebug_newline(); - PrintProfilerResult(); - } - - //Save Settings to Backup Memory - if (NeedSaveSettings && (HAL_GPIO_ReadPin(CPU_PW_GPIO_Port, CPU_PW_Pin) == GPIO_PIN_SET)) - SaveSettings(); - - //Reset counters - tim6_delay = HAL_GetTick(); - FPGA_samples = 0; - AUDIOPROC_samples = 0; - WM8731_DMA_samples = 0; - FFT_FPS = 0; - RX_USB_AUDIO_SAMPLES = 0; - TX_USB_AUDIO_SAMPLES = 0; - FPGA_NeedSendParams = true; - - //redraw lcd to fix problem - #ifdef LCD_HX8357B - static uint8_t HX8357B_BUG_redraw_counter = 0; - HX8357B_BUG_redraw_counter++; - if(HX8357B_BUG_redraw_counter == 20) - { - LCD_UpdateQuery.TopButtonsRedraw = true; - LCD_UpdateQuery.StatusInfoBarRedraw = true; - LCD_UpdateQuery.StatusInfoGUIRedraw = true; - } - else if(HX8357B_BUG_redraw_counter == 40) - { - LCD_UpdateQuery.FreqInfoRedraw = true; - LCD_UpdateQuery.StatusInfoGUIRedraw = true; - } - else if(HX8357B_BUG_redraw_counter >= 60) - { - LCD_UpdateQuery.StatusInfoGUIRedraw = true; - LCD_UpdateQuery.StatusInfoBarRedraw = true; - HX8357B_BUG_redraw_counter = 0; - } - #endif - } - - //power off sequence - if ((HAL_GPIO_ReadPin(CPU_PW_GPIO_Port, CPU_PW_Pin) == GPIO_PIN_RESET) && ((HAL_GetTick() - powerdown_start_delay) > POWERDOWN_TIMEOUT) && !NeedSaveCalibration && !SPI_process && !EEPROM_Busy) - { - TRX_Inited = false; - LCD_busy = true; - HAL_Delay(10); - WM8731_Mute(); - WM8731_CleanBuffer(); - LCDDriver_Fill(COLOR_BLACK); - LCD_showInfo("GOOD BYE!", false); - SaveSettings(); - SaveSettingsToEEPROM(); - sendToDebug_flush(); - HAL_GPIO_WritePin(CPU_PW_HOLD_GPIO_Port, CPU_PW_HOLD_Pin, GPIO_PIN_RESET); - while (HAL_GPIO_ReadPin(CPU_PW_GPIO_Port, CPU_PW_Pin) == GPIO_PIN_RESET) {} //-V776 - HAL_Delay(500); - //SCB->AIRCR = 0x05FA0004; // software resetw - while(true){} - } - - //TRX protector - if(TRX_on_TX()) - { - if(TRX_SWR > TRX_MAX_SWR && !TRX_Tune && CurrentVFO()->Mode != TRX_MODE_LOOPBACK) - { - TRX_Tune = false; - TRX_ptt_hard = false; - TRX_ptt_soft = false; - LCD_UpdateQuery.StatusInfoGUI = true; - LCD_UpdateQuery.TopButtons = true; - NeedSaveSettings = true; - TRX_Restart_Mode(); - sendToDebug_strln("SWR too HIGH!"); - LCD_showTooltip("SWR too HIGH!"); - } - } - - // restart USB if there is no activity (off) to find a new connection - if (TRX_Inited && ((USB_LastActiveTime + USB_RESTART_TIMEOUT < HAL_GetTick()))) // || (USB_LastActiveTime == 0) - USBD_Restart(); - - /* USER CODE END TIM6_DAC_IRQn 1 */ -} - -/** - * @brief This function handles TIM7 global interrupt. - */ -void TIM7_IRQHandler(void) -{ - /* USER CODE BEGIN TIM7_IRQn 0 */ - CPULOAD_WakeUp(); - /* USER CODE END TIM7_IRQn 0 */ - HAL_TIM_IRQHandler(&htim7); - /* USER CODE BEGIN TIM7_IRQn 1 */ - sendToDebug_flush(); // send data to debug from the buffer - - // unmute after transition process end - if(TRX_Temporary_Mute_StartTime > 0 && (HAL_GetTick() - TRX_Temporary_Mute_StartTime) > 10) - { - WM8731_UnMute(); - TRX_Temporary_Mute_StartTime = 0; - } - /* USER CODE END TIM7_IRQn 1 */ -} - -/** - * @brief This function handles DMA2 stream1 global interrupt. - */ -void DMA2_Stream1_IRQHandler(void) -{ - /* USER CODE BEGIN DMA2_Stream1_IRQn 0 */ - CPULOAD_WakeUp(); - /* USER CODE END DMA2_Stream1_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_memtomem_dma2_stream1); - /* USER CODE BEGIN DMA2_Stream1_IRQn 1 */ - - /* USER CODE END DMA2_Stream1_IRQn 1 */ -} - -/** - * @brief This function handles DMA2 stream2 global interrupt. - */ -void DMA2_Stream2_IRQHandler(void) -{ - /* USER CODE BEGIN DMA2_Stream2_IRQn 0 */ - CPULOAD_WakeUp(); - /* USER CODE END DMA2_Stream2_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_memtomem_dma2_stream2); - /* USER CODE BEGIN DMA2_Stream2_IRQn 1 */ - - /* USER CODE END DMA2_Stream2_IRQn 1 */ -} - -/** - * @brief This function handles USB On The Go FS global interrupt. - */ -void OTG_FS_IRQHandler(void) -{ - /* USER CODE BEGIN OTG_FS_IRQn 0 */ - CPULOAD_WakeUp(); - /* USER CODE END OTG_FS_IRQn 0 */ - HAL_PCD_IRQHandler(&hpcd_USB_OTG_FS); - /* USER CODE BEGIN OTG_FS_IRQn 1 */ - - /* USER CODE END OTG_FS_IRQn 1 */ -} - -/** - * @brief This function handles DMA2 stream5 global interrupt. - */ -void DMA2_Stream5_IRQHandler(void) -{ - /* USER CODE BEGIN DMA2_Stream5_IRQn 0 */ - - /* USER CODE END DMA2_Stream5_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_memtomem_dma2_stream5); - /* USER CODE BEGIN DMA2_Stream5_IRQn 1 */ - FFT_afterPrintFFT(); - /* USER CODE END DMA2_Stream5_IRQn 1 */ -} - -/** - * @brief This function handles DMA2 stream6 global interrupt. - */ -void DMA2_Stream6_IRQHandler(void) -{ - /* USER CODE BEGIN DMA2_Stream6_IRQn 0 */ - CPULOAD_WakeUp(); - /* USER CODE END DMA2_Stream6_IRQn 0 */ - HAL_DMA_IRQHandler(&hdma_memtomem_dma2_stream6); - /* USER CODE BEGIN DMA2_Stream6_IRQn 1 */ - FFT_printWaterfallDMA(); // display the waterfall - /* USER CODE END DMA2_Stream6_IRQn 1 */ -} - -/* USER CODE BEGIN 1 */ -void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) -{ - CPULOAD_WakeUp(); - if (GPIO_Pin == GPIO_PIN_10) //FPGA BUS - { - if(!WM8731_Buffer_underrun) - FPGA_fpgadata_iqclock(); // IQ data - FPGA_fpgadata_stuffclock(); // parameters and other services - } - else if (GPIO_Pin == GPIO_PIN_3) //Main encoder - { - if (TRX_Inited) - FRONTPANEL_ENCODER_checkRotate(); - } - else if (GPIO_Pin == GPIO_PIN_2) //PTT - { - if (TRX_Inited && CurrentVFO()->Mode != TRX_MODE_NO_TX) - TRX_ptt_change(); - } - else if (GPIO_Pin == GPIO_PIN_1) //KEY DOT - { - TRX_key_change(); - } - else if (GPIO_Pin == GPIO_PIN_0) //KEY DASH - { - TRX_key_change(); - } - else if (GPIO_Pin == GPIO_PIN_7) //POWER OFF - { - powerdown_start_delay = HAL_GetTick(); - } -} -/* USER CODE END 1 */ -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Src/swr_analyzer.c b/Src/swr_analyzer.c deleted file mode 100644 index e2925dc..0000000 --- a/Src/swr_analyzer.c +++ /dev/null @@ -1,201 +0,0 @@ -#include "swr_analyzer.h" -#include "main.h" -#include "lcd_driver.h" -#include "trx_manager.h" -#include "functions.h" -#include "fpga.h" -#include "lcd.h" -#include "rf_unit.h" - -//Private variables -static const uint16_t graph_start_x = 25; -static const uint16_t graph_width = LCD_WIDTH - 30; -static const uint16_t graph_start_y = 5; -static const uint16_t graph_height = LCD_HEIGHT - 25; -static float32_t now_freq; -static float32_t freq_step; -static uint16_t graph_sweep_x = 0; -static uint32_t tick_start_time = 0; -static int16_t graph_selected_x = (LCD_WIDTH - 30) / 2; -static float32_t data[LCD_WIDTH - 30] = {0}; -static uint32_t startFreq = 0; -static uint32_t endFreq = 0; - -//Saved variables -static uint32_t Lastfreq = 0; -static bool LastMute = false; - -//Public variables -bool sysmenu_swr_opened = false; - -//Prototypes -static void SWR_DrawBottomGUI(void); // display status at the bottom of the screen -static void SWR_DrawGraphCol(uint16_t x, bool clear); // display the data column -static uint16_t SWR_getYfromX(uint16_t x); // get height from data id - -// prepare the spectrum analyzer -void SWR_Start(uint32_t start, uint32_t end) -{ - LCD_busy = true; - startFreq = start; - endFreq = end; - - //save settings - Lastfreq = CurrentVFO()->Freq; - LastMute = TRX_Mute; - - // draw the GUI - LCDDriver_Fill(COLOR_BLACK); - LCDDriver_drawFastVLine(graph_start_x, graph_start_y, graph_height, COLOR_WHITE); - LCDDriver_drawFastHLine(graph_start_x, graph_start_y + graph_height, graph_width, COLOR_WHITE); - - // horizontal labels - char ctmp[64] = {0}; - sprintf(ctmp, "%u", (startFreq / 1000)); - LCDDriver_printText(ctmp, graph_start_x + 2, graph_start_y + graph_height + 3, COLOR_GREEN, COLOR_BLACK, 1); - sprintf(ctmp, "%u", (endFreq / 1000)); - LCDDriver_printText(ctmp, graph_start_x + graph_width - 36, graph_start_y + graph_height + 3, COLOR_GREEN, COLOR_BLACK, 1); - SWR_DrawBottomGUI(); - - // vertical labels - float32_t vres = SWR_TopSWR - 1.0f; - float32_t partsize = vres / (SWR_VParts - 1); - for (uint8_t n = 0; n < SWR_VParts; n++) - { - int32_t y = graph_start_y + (int32_t)(partsize * n * graph_height / vres); - sprintf(ctmp, "%.1f", (double)(SWR_TopSWR - partsize * n)); - LCDDriver_printText(ctmp, 0, (uint16_t)y, COLOR_GREEN, COLOR_BLACK, 1); - LCDDriver_drawFastHLine(graph_start_x, (uint16_t)y, graph_width, COLOR_DGRAY); - } - - // start scanning - TRX_setFrequency(startFreq, CurrentVFO()); - TRX_Mute = true; - TRX_Tune = true; - TRX_ptt_hard = TRX_Tune; - TRX_Restart_Mode(); - - FPGA_NeedSendParams = true; - now_freq = startFreq; - freq_step = (endFreq - startFreq) / graph_width; - graph_sweep_x = 0; - tick_start_time = HAL_GetTick(); - - LCD_busy = false; - - LCD_UpdateQuery.SystemMenu = true; -} - -void SWR_Stop(void) -{ - TRX_setFrequency(Lastfreq, CurrentVFO()); - TRX_Mute = LastMute; - TRX_Tune = false; - TRX_ptt_hard = false; - TRX_ptt_soft = false; - TRX_Restart_Mode(); -} - -// draw the spectrum analyzer -void SWR_Draw(void) -{ - if (LCD_busy) - return; - - // Wait while data is being typed - if ((HAL_GetTick() - tick_start_time) < SWR_StepDelay) - { - LCD_UpdateQuery.SystemMenu = true; - return; - } - if (TRX_SWR == 0) //-V550 - return; - tick_start_time = HAL_GetTick(); - - LCD_busy = true; - // Read the signal SWR - RF_UNIT_ProcessSensors(); - - // Draw - data[graph_sweep_x] = TRX_SWR; - SWR_DrawGraphCol(graph_sweep_x, true); - // draw a marker - if (graph_sweep_x == graph_selected_x) - SWR_DrawBottomGUI(); - - // Move on to calculating the next step - graph_sweep_x++; - if (now_freq > endFreq) - { - graph_sweep_x = 0; - now_freq = startFreq; - } - now_freq += freq_step; - TRX_setFrequency((uint32_t)now_freq, CurrentVFO()); - FPGA_NeedSendParams = true; - LCD_busy = false; -} - -// get height from data id -static uint16_t SWR_getYfromX(uint16_t x) -{ - int32_t y = graph_start_y + (int32_t)((SWR_TopSWR - data[x]) * (float32_t)(graph_height) / (SWR_TopSWR - 1.0f)); - if (y < graph_start_y) - y = graph_start_y; - if (y > ((graph_start_y + graph_height) - 1)) - y = (graph_start_y + graph_height) - 1; - return (uint16_t)y; -} - -// display the data column -static void SWR_DrawGraphCol(uint16_t x, bool clear) -{ - if (x >= graph_width) - return; - - if (clear) - { - // clear - LCDDriver_drawFastVLine((graph_start_x + x + 1), graph_start_y, graph_height, COLOR_BLACK); - // draw stripes behind the chart - int16_t vres = SWR_TopSWR; - for (uint8_t n = 0; n < (SWR_VParts - 1); n++) - LCDDriver_drawPixel((graph_start_x + x + 1), (uint16_t)(graph_start_y + ((vres / (SWR_VParts - 1)) * n * graph_height / vres)), COLOR_DGRAY); - } - // draw the graph - if (x > 0) - LCDDriver_drawLine((graph_start_x + x), SWR_getYfromX(x - 1), (graph_start_x + x + 1), SWR_getYfromX(x), COLOR_RED); - else - LCDDriver_drawPixel((graph_start_x + x + 1), SWR_getYfromX(x), COLOR_RED); -} - -// display status at the bottom of the screen -static void SWR_DrawBottomGUI(void) -{ - char ctmp[64] = {0}; - int32_t freq = (int32_t)startFreq + ((int32_t)(endFreq - startFreq) / (graph_width - 1) * graph_selected_x); - sprintf(ctmp, "Freq=%dkHz SWR=%.1f", (freq / 1000), (double)data[graph_selected_x]); - LCDDriver_Fill_RectWH(170, graph_start_y + graph_height + 3, 200, 6, COLOR_BLACK); - LCDDriver_printText(ctmp, 170, graph_start_y + graph_height + 3, COLOR_GREEN, COLOR_BLACK, 1); - LCDDriver_drawFastVLine(graph_start_x + (uint16_t)graph_selected_x + 1, graph_start_y, graph_height, COLOR_GREEN); -} - -// analyzer events to the encoder -void SWR_EncRotate(int8_t direction) -{ - if(LCD_busy) - return; - LCD_busy = true; - // erase the old marker - SWR_DrawGraphCol((uint16_t)graph_selected_x, true); - if (direction < 0) - SWR_DrawGraphCol((uint16_t)graph_selected_x + 1, false); - // draw a new one - graph_selected_x += direction; - if (graph_selected_x < 0) - graph_selected_x = 0; - if (graph_selected_x > (graph_width - 1)) - graph_selected_x = graph_width - 1; - SWR_DrawBottomGUI(); - LCD_busy = false; -} diff --git a/Src/swr_analyzer.h b/Src/swr_analyzer.h deleted file mode 100644 index c39bef7..0000000 --- a/Src/swr_analyzer.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef SWR_ANALYZER_H -#define SWR_ANALYZER_H - -#include "stm32f4xx.h" -#include "main.h" -#include "stdbool.h" - -#define SWR_StepDelay 1 //scan delay, msec -#define SWR_VParts 6 //vertical signatures -#define SWR_TopSWR 10.0f - -//Public variabled -extern bool sysmenu_swr_opened; - -//Public methods -extern void SWR_Start(uint32_t start, uint32_t end); //analyzer launch -extern void SWR_Stop(void); //stop session -extern void SWR_Draw(void); //drawing analyzer -extern void SWR_EncRotate(int8_t direction); //analyzer events per encoder - -#endif diff --git a/Src/system_menu.c b/Src/system_menu.c deleted file mode 100644 index b93e548..0000000 --- a/Src/system_menu.c +++ /dev/null @@ -1,1925 +0,0 @@ -#include "system_menu.h" -#include "lcd.h" -#include "settings.h" -#include "audio_filters.h" -#include "bootloader.h" -#include "functions.h" -#include "swr_analyzer.h" -#include "fonts.h" -#include "agc.h" -#include "screen_layout.h" -#include "bands.h" - -static void SYSMENU_HANDL_TRX_RFPower(int8_t direction); -static void SYSMENU_HANDL_TRX_BandMap(int8_t direction); -static void SYSMENU_HANDL_TRX_AutoGain(int8_t direction); -static void SYSMENU_HANDL_TRX_TWO_SIGNAL_TUNE(int8_t direction); -static void SYSMENU_HANDL_TRX_RFFilters(int8_t direction); -static void SYSMENU_HANDL_TRX_MICIN(int8_t direction); -static void SYSMENU_HANDL_TRX_LINEIN(int8_t direction); -static void SYSMENU_HANDL_TRX_USBIN(int8_t direction); -static void SYSMENU_HANDL_TRX_SHIFT_INTERVAL(int8_t direction); -static void SYSMENU_HANDL_TRX_FRQ_STEP(int8_t direction); -static void SYSMENU_HANDL_TRX_FRQ_FAST_STEP(int8_t direction); -static void SYSMENU_HANDL_TRX_FRQ_ENC_STEP(int8_t direction); -static void SYSMENU_HANDL_TRX_FRQ_ENC_FAST_STEP(int8_t direction); -static void SYSMENU_HANDL_TRX_ENC_ACCELERATE(int8_t direction); -static void SYSMENU_HANDL_TRX_ATT_STEP(int8_t direction); -static void SYSMENU_HANDL_TRX_DEBUG_CONSOLE(int8_t direction); -static void SYSMENU_HANDL_TRX_SetCallsign(int8_t direction); -static void SYSMENU_HANDL_TRX_TRANSV_ENABLE(int8_t direction); -static void SYSMENU_HANDL_TRX_TRANSV_OFFSET(int8_t direction); - -static void SYSMENU_HANDL_AUDIO_VOLUME(int8_t direction); -static void SYSMENU_HANDL_AUDIO_IFGain(int8_t direction); -static void SYSMENU_HANDL_AUDIO_AGC_GAIN_TARGET(int8_t direction); -static void SYSMENU_HANDL_AUDIO_MIC_Gain(int8_t direction); -static void SYSMENU_HANDL_AUDIO_DNR_THRES(int8_t direction); -static void SYSMENU_HANDL_AUDIO_DNR_AVERAGE(int8_t direction); -static void SYSMENU_HANDL_AUDIO_DNR_MINMAL(int8_t direction); -static void SYSMENU_HANDL_AUDIO_SSB_HPF_pass(int8_t direction); -static void SYSMENU_HANDL_AUDIO_SSB_LPF_pass(int8_t direction); -static void SYSMENU_HANDL_AUDIO_CW_LPF_pass(int8_t direction); -static void SYSMENU_HANDL_AUDIO_CW_HPF_pass(int8_t direction); -static void SYSMENU_HANDL_AUDIO_AM_LPF_pass(int8_t direction); -static void SYSMENU_HANDL_AUDIO_FM_LPF_pass(int8_t direction); -static void SYSMENU_HANDL_AUDIO_MIC_EQ_LOW(int8_t direction); -static void SYSMENU_HANDL_AUDIO_MIC_EQ_MID(int8_t direction); -static void SYSMENU_HANDL_AUDIO_MIC_EQ_HIG(int8_t direction); -static void SYSMENU_HANDL_AUDIO_RX_EQ_LOW(int8_t direction); -static void SYSMENU_HANDL_AUDIO_RX_EQ_MID(int8_t direction); -static void SYSMENU_HANDL_AUDIO_RX_EQ_HIG(int8_t direction); -static void SYSMENU_HANDL_AUDIO_RX_AGC_SSB_Speed(int8_t direction); -static void SYSMENU_HANDL_AUDIO_RX_AGC_CW_Speed(int8_t direction); -static void SYSMENU_HANDL_AUDIO_TX_AGCSpeed(int8_t direction); -static void SYSMENU_HANDL_AUDIO_FMSquelch(int8_t direction); -static void SYSMENU_HANDL_AUDIO_VAD_Squelch(int8_t direction); -static void SYSMENU_HANDL_AUDIO_Beeper(int8_t direction); - -static void SYSMENU_HANDL_CW_GENERATOR_SHIFT_HZ(int8_t direction); -static void SYSMENU_HANDL_CW_SelfHear(int8_t direction); -static void SYSMENU_HANDL_CW_Keyer(int8_t direction); -static void SYSMENU_HANDL_CW_Keyer_WPM(int8_t direction); -static void SYSMENU_HANDL_CW_Key_timeout(int8_t direction); -static void SYSMENU_HANDL_CW_GaussFilter(int8_t direction); - -static void SYSMENU_HANDL_SCREEN_FFT_Enabled(int8_t direction); -static void SYSMENU_HANDL_SCREEN_COLOR_THEME(int8_t direction); -static void SYSMENU_HANDL_SCREEN_FFT_Averaging(int8_t direction); -static void SYSMENU_HANDL_SCREEN_FFT_Window(int8_t direction); -static void SYSMENU_HANDL_SCREEN_FFT_Zoom(int8_t direction); -static void SYSMENU_HANDL_SCREEN_FFT_Color(int8_t direction); -static void SYSMENU_HANDL_SCREEN_FFT_Grid(int8_t direction); -static void SYSMENU_HANDL_SCREEN_FFT_Background(int8_t direction); -static void SYSMENU_HANDL_SCREEN_FFT_Compressor(int8_t direction); - -static void SYSMENU_HANDL_ADC_PGA(int8_t direction); -static void SYSMENU_HANDL_ADC_RAND(int8_t direction); -static void SYSMENU_HANDL_ADC_SHDN(int8_t direction); -static void SYSMENU_HANDL_ADC_DITH(int8_t direction); -static void SYSMENU_HANDL_ADC_DRIVER(int8_t direction); - -static void SYSMENU_HANDL_SETTIME(int8_t direction); -static void SYSMENU_HANDL_Bootloader(int8_t direction); - -static void SYSMENU_HANDL_CALIB_ENCODER_SLOW_RATE(int8_t direction); -static void SYSMENU_HANDL_CALIB_ENCODER_INVERT(int8_t direction); -static void SYSMENU_HANDL_CALIB_ENCODER2_INVERT(int8_t direction); -static void SYSMENU_HANDL_CALIB_ENCODER_DEBOUNCE(int8_t direction); -static void SYSMENU_HANDL_CALIB_ENCODER2_DEBOUNCE(int8_t direction); -static void SYSMENU_HANDL_CALIB_ENCODER_ON_FALLING(int8_t direction); -static void SYSMENU_HANDL_CALIB_CIC_SHIFT(int8_t direction); -static void SYSMENU_HANDL_CALIB_CICCOMP_SHIFT(int8_t direction); -static void SYSMENU_HANDL_CALIB_TXCICCOMP_SHIFT(int8_t direction); -static void SYSMENU_HANDL_CALIB_DAC_SHIFT(int8_t direction); -static void SYSMENU_HANDL_CALIB_RF_GAIN_LF(int8_t direction); -static void SYSMENU_HANDL_CALIB_RF_GAIN_HF_LOW(int8_t direction); -static void SYSMENU_HANDL_CALIB_RF_GAIN_HF(int8_t direction); -static void SYSMENU_HANDL_CALIB_RF_GAIN_HF_HIGH(int8_t direction); -static void SYSMENU_HANDL_CALIB_S_METER(int8_t direction); -static void SYSMENU_HANDL_CALIB_ADC_OFFSET(int8_t direction); -static void SYSMENU_HANDL_CALIB_SWR_TRANS_RATE(int8_t direction); - -static void SYSMENU_HANDL_TRXMENU(int8_t direction); -static void SYSMENU_HANDL_AUDIOMENU(int8_t direction); -static void SYSMENU_HANDL_CWMENU(int8_t direction); -static void SYSMENU_HANDL_LCDMENU(int8_t direction); -static void SYSMENU_HANDL_ADCMENU(int8_t direction); -static void SYSMENU_HANDL_CALIBRATIONMENU(int8_t direction); -static void SYSMENU_HANDL_SERVICESMENU(int8_t direction); - -static void SYSMENU_HANDL_SWR_BAND_START(int8_t direction); -static void SYSMENU_HANDL_SWR_HF_START(int8_t direction); - -static const struct sysmenu_item_handler sysmenu_handlers[] = - { - {"TRX Settings", SYSMENU_MENU, 0, SYSMENU_HANDL_TRXMENU}, - {"AUDIO Settings", SYSMENU_MENU, 0, SYSMENU_HANDL_AUDIOMENU}, - {"CW Settings", SYSMENU_MENU, 0, SYSMENU_HANDL_CWMENU}, - {"SCREEN Settings", SYSMENU_MENU, 0, SYSMENU_HANDL_LCDMENU}, - {"ADC/DAC Settings", SYSMENU_MENU, 0, SYSMENU_HANDL_ADCMENU}, - {"Services", SYSMENU_MENU, 0, SYSMENU_HANDL_SERVICESMENU}, - {"Set Clock Time", SYSMENU_RUN, 0, SYSMENU_HANDL_SETTIME}, - {"Flash update", SYSMENU_RUN, 0, SYSMENU_HANDL_Bootloader}, - {"Calibration", SYSMENU_HIDDEN_MENU, 0, SYSMENU_HANDL_CALIBRATIONMENU}, -}; -static const uint8_t sysmenu_item_count = sizeof(sysmenu_handlers) / sizeof(sysmenu_handlers[0]); - -static const struct sysmenu_item_handler sysmenu_trx_handlers[] = - { - {"RF Power", SYSMENU_UINT8, (uint32_t *)&TRX.RF_Power, SYSMENU_HANDL_TRX_RFPower}, - {"Band Map", SYSMENU_BOOLEAN, (uint32_t *)&TRX.BandMapEnabled, SYSMENU_HANDL_TRX_BandMap}, - {"AutoGainer", SYSMENU_BOOLEAN, (uint32_t *)&TRX.AutoGain, SYSMENU_HANDL_TRX_AutoGain}, - {"Two Signal TUNE", SYSMENU_BOOLEAN, (uint32_t *)&TRX.TWO_SIGNAL_TUNE, SYSMENU_HANDL_TRX_TWO_SIGNAL_TUNE}, - {"Shift Interval", SYSMENU_UINT16, (uint32_t *)&TRX.SHIFT_INTERVAL, SYSMENU_HANDL_TRX_SHIFT_INTERVAL}, - {"Freq Step", SYSMENU_UINT16, (uint32_t *)&TRX.FRQ_STEP, SYSMENU_HANDL_TRX_FRQ_STEP}, - {"Freq Step FAST", SYSMENU_UINT16, (uint32_t *)&TRX.FRQ_FAST_STEP, SYSMENU_HANDL_TRX_FRQ_FAST_STEP}, - {"Encoder Accelerate", SYSMENU_BOOLEAN, (uint32_t *)&TRX.Encoder_Accelerate, SYSMENU_HANDL_TRX_ENC_ACCELERATE}, - {"Att step, dB", SYSMENU_UINT8, (uint32_t *)&TRX.ATT_STEP, SYSMENU_HANDL_TRX_ATT_STEP}, - {"DEBUG Console", SYSMENU_BOOLEAN, (uint32_t *)&TRX.Debug_Console, SYSMENU_HANDL_TRX_DEBUG_CONSOLE}, - {"MIC IN", SYSMENU_BOOLEAN, (uint32_t *)&TRX.InputType_MIC, SYSMENU_HANDL_TRX_MICIN}, - {"LINE IN", SYSMENU_BOOLEAN, (uint32_t *)&TRX.InputType_LINE, SYSMENU_HANDL_TRX_LINEIN}, - {"USB IN", SYSMENU_BOOLEAN, (uint32_t *)&TRX.InputType_USB, SYSMENU_HANDL_TRX_USBIN}, - {"Callsign", SYSMENU_RUN, 0, SYSMENU_HANDL_TRX_SetCallsign}, - {"Transverter Enable", SYSMENU_BOOLEAN, (uint32_t *)&TRX.Transverter_Enabled, SYSMENU_HANDL_TRX_TRANSV_ENABLE}, - {"Transverter Offset, mHz", SYSMENU_UINT16, (uint32_t *)&TRX.Transverter_Offset_Mhz, SYSMENU_HANDL_TRX_TRANSV_OFFSET}, -}; -static const uint8_t sysmenu_trx_item_count = sizeof(sysmenu_trx_handlers) / sizeof(sysmenu_trx_handlers[0]); - -static const struct sysmenu_item_handler sysmenu_audio_handlers[] = - { - {"Volume", SYSMENU_UINT8, (uint32_t *)&TRX.Volume, SYSMENU_HANDL_AUDIO_VOLUME}, - {"IF Gain, dB", SYSMENU_UINT8, (uint32_t *)&TRX.IF_Gain, SYSMENU_HANDL_AUDIO_IFGain}, - {"AGC Gain target, LKFS", SYSMENU_INT8, (uint32_t *)&TRX.AGC_GAIN_TARGET, SYSMENU_HANDL_AUDIO_AGC_GAIN_TARGET}, - {"Mic Gain", SYSMENU_UINT8, (uint32_t *)&TRX.MIC_GAIN, SYSMENU_HANDL_AUDIO_MIC_Gain}, - {"DNR Threshold", SYSMENU_UINT8, (uint32_t *)&TRX.DNR_SNR_THRESHOLD, SYSMENU_HANDL_AUDIO_DNR_THRES}, - {"DNR Average", SYSMENU_UINT8, (uint32_t *)&TRX.DNR_AVERAGE, SYSMENU_HANDL_AUDIO_DNR_AVERAGE}, - {"DNR Minimal", SYSMENU_UINT8, (uint32_t *)&TRX.DNR_MINIMAL, SYSMENU_HANDL_AUDIO_DNR_MINMAL}, - {"SSB HPF Pass", SYSMENU_UINT16, (uint32_t *)&TRX.SSB_HPF_Filter, SYSMENU_HANDL_AUDIO_SSB_HPF_pass}, - {"SSB LPF Pass", SYSMENU_UINT16, (uint32_t *)&TRX.SSB_LPF_Filter, SYSMENU_HANDL_AUDIO_SSB_LPF_pass}, - {"CW HPF Pass", SYSMENU_UINT16, (uint32_t *)&TRX.CW_HPF_Filter, SYSMENU_HANDL_AUDIO_CW_HPF_pass}, - {"CW LPF Pass", SYSMENU_UINT16, (uint32_t *)&TRX.CW_LPF_Filter, SYSMENU_HANDL_AUDIO_CW_LPF_pass}, - {"AM LPF Pass", SYSMENU_UINT16, (uint32_t *)&TRX.AM_LPF_Filter, SYSMENU_HANDL_AUDIO_AM_LPF_pass}, - {"FM LPF Pass", SYSMENU_UINT16, (uint32_t *)&TRX.FM_LPF_Filter, SYSMENU_HANDL_AUDIO_FM_LPF_pass}, - {"FM Squelch", SYSMENU_UINT8, (uint32_t *)&TRX.FM_SQL_threshold, SYSMENU_HANDL_AUDIO_FMSquelch}, - {"MIC EQ Low", SYSMENU_INT8, (uint32_t *)&TRX.MIC_EQ_LOW, SYSMENU_HANDL_AUDIO_MIC_EQ_LOW}, - {"MIC EQ Mid", SYSMENU_INT8, (uint32_t *)&TRX.MIC_EQ_MID, SYSMENU_HANDL_AUDIO_MIC_EQ_MID}, - {"MIC EQ High", SYSMENU_INT8, (uint32_t *)&TRX.MIC_EQ_HIG, SYSMENU_HANDL_AUDIO_MIC_EQ_HIG}, - {"RX EQ Low", SYSMENU_INT8, (uint32_t *)&TRX.RX_EQ_LOW, SYSMENU_HANDL_AUDIO_RX_EQ_LOW}, - {"RX EQ Mid", SYSMENU_INT8, (uint32_t *)&TRX.RX_EQ_MID, SYSMENU_HANDL_AUDIO_RX_EQ_MID}, - {"RX EQ High", SYSMENU_INT8, (uint32_t *)&TRX.RX_EQ_HIG, SYSMENU_HANDL_AUDIO_RX_EQ_HIG}, - {"RX AGC SSB Speed", SYSMENU_UINT8, (uint32_t *)&TRX.RX_AGC_SSB_speed, SYSMENU_HANDL_AUDIO_RX_AGC_SSB_Speed}, - {"RX AGC CW Speed", SYSMENU_UINT8, (uint32_t *)&TRX.RX_AGC_CW_speed, SYSMENU_HANDL_AUDIO_RX_AGC_CW_Speed}, - {"TX AGC Speed", SYSMENU_UINT8, (uint32_t *)&TRX.TX_AGC_speed, SYSMENU_HANDL_AUDIO_TX_AGCSpeed}, - {"Beeper", SYSMENU_UINT8, (uint32_t *)&TRX.Beeper, SYSMENU_HANDL_AUDIO_Beeper}, -}; -static const uint8_t sysmenu_audio_item_count = sizeof(sysmenu_audio_handlers) / sizeof(sysmenu_audio_handlers[0]); - -static const struct sysmenu_item_handler sysmenu_cw_handlers[] = - { - {"CW Key timeout", SYSMENU_UINT16, (uint32_t *)&TRX.CW_Key_timeout, SYSMENU_HANDL_CW_Key_timeout}, - {"CW Generator shift", SYSMENU_UINT16, (uint32_t *)&TRX.CW_GENERATOR_SHIFT_HZ, SYSMENU_HANDL_CW_GENERATOR_SHIFT_HZ}, - {"CW Self Hear", SYSMENU_BOOLEAN, (uint32_t *)&TRX.CW_SelfHear, SYSMENU_HANDL_CW_SelfHear}, - {"CW Keyer", SYSMENU_BOOLEAN, (uint32_t *)&TRX.CW_KEYER, SYSMENU_HANDL_CW_Keyer}, - {"CW Keyer WPM", SYSMENU_UINT8, (uint32_t *)&TRX.CW_KEYER_WPM, SYSMENU_HANDL_CW_Keyer_WPM}, - {"CW Gauss filter", SYSMENU_BOOLEAN, (uint32_t *)&TRX.CW_GaussFilter, SYSMENU_HANDL_CW_GaussFilter}, -}; -static const uint8_t sysmenu_cw_item_count = sizeof(sysmenu_cw_handlers) / sizeof(sysmenu_cw_handlers[0]); - -static const struct sysmenu_item_handler sysmenu_screen_handlers[] = - { - {"FFT Zoom", SYSMENU_UINT8, (uint32_t *)&TRX.FFT_Zoom, SYSMENU_HANDL_SCREEN_FFT_Zoom}, - {"Color Theme", SYSMENU_UINT8, (uint32_t *)&TRX.ColorThemeId, SYSMENU_HANDL_SCREEN_COLOR_THEME}, - {"FFT Color", SYSMENU_UINT8, (uint32_t *)&TRX.FFT_Color, SYSMENU_HANDL_SCREEN_FFT_Color}, - {"FFT Grid", SYSMENU_UINT8, (uint32_t *)&TRX.FFT_Grid, SYSMENU_HANDL_SCREEN_FFT_Grid}, - {"FFT Background", SYSMENU_BOOLEAN, (uint32_t *)&TRX.FFT_Background, SYSMENU_HANDL_SCREEN_FFT_Background}, - {"FFT Enabled", SYSMENU_BOOLEAN, (uint32_t *)&TRX.FFT_Enabled, SYSMENU_HANDL_SCREEN_FFT_Enabled}, - {"FFT Compressor", SYSMENU_BOOLEAN, (uint32_t *)&TRX.FFT_Compressor, SYSMENU_HANDL_SCREEN_FFT_Compressor}, - {"FFT Averaging", SYSMENU_UINT8, (uint32_t *)&TRX.FFT_Averaging, SYSMENU_HANDL_SCREEN_FFT_Averaging}, - {"FFT Window", SYSMENU_UINT8, (uint32_t *)&TRX.FFT_Window, SYSMENU_HANDL_SCREEN_FFT_Window}, -}; -static const uint8_t sysmenu_screen_item_count = sizeof(sysmenu_screen_handlers) / sizeof(sysmenu_screen_handlers[0]); - -static const struct sysmenu_item_handler sysmenu_adc_handlers[] = - { - {"ADC Driver", SYSMENU_BOOLEAN, (uint32_t *)&TRX.ADC_Driver, SYSMENU_HANDL_ADC_DRIVER}, - {"ADC Shutdown", SYSMENU_BOOLEAN, (uint32_t *)&TRX.ADC_SHDN, SYSMENU_HANDL_ADC_SHDN}, -}; -static const uint8_t sysmenu_adc_item_count = sizeof(sysmenu_adc_handlers) / sizeof(sysmenu_adc_handlers[0]); - -static const struct sysmenu_item_handler sysmenu_calibration_handlers[] = - { - {"Encoder invert", SYSMENU_BOOLEAN, (uint32_t *)&CALIBRATE.ENCODER_INVERT, SYSMENU_HANDL_CALIB_ENCODER_INVERT}, - {"Encoder2 invert", SYSMENU_BOOLEAN, (uint32_t *)&CALIBRATE.ENCODER2_INVERT, SYSMENU_HANDL_CALIB_ENCODER2_INVERT}, - {"Encoder debounce", SYSMENU_UINT8, (uint32_t *)&CALIBRATE.ENCODER_DEBOUNCE, SYSMENU_HANDL_CALIB_ENCODER_DEBOUNCE}, - {"Encoder2 debounce", SYSMENU_UINT8, (uint32_t *)&CALIBRATE.ENCODER2_DEBOUNCE, SYSMENU_HANDL_CALIB_ENCODER2_DEBOUNCE}, - {"Encoder slow rate", SYSMENU_UINT8, (uint32_t *)&CALIBRATE.ENCODER_SLOW_RATE, SYSMENU_HANDL_CALIB_ENCODER_SLOW_RATE}, - {"Encoder on falling", SYSMENU_BOOLEAN, (uint32_t *)&CALIBRATE.ENCODER_ON_FALLING, SYSMENU_HANDL_CALIB_ENCODER_ON_FALLING}, - {"CIC Shift", SYSMENU_UINT8, (uint32_t *)&CALIBRATE.CIC_GAINER_val, SYSMENU_HANDL_CALIB_CIC_SHIFT}, - {"CICCOMP Shift", SYSMENU_UINT8, (uint32_t *)&CALIBRATE.CICFIR_GAINER_val, SYSMENU_HANDL_CALIB_CICCOMP_SHIFT}, - {"TX CICCOMP Shift", SYSMENU_UINT8, (uint32_t *)&CALIBRATE.TXCICFIR_GAINER_val, SYSMENU_HANDL_CALIB_TXCICCOMP_SHIFT}, - {"DAC Shift", SYSMENU_UINT8, (uint32_t *)&CALIBRATE.DAC_GAINER_val, SYSMENU_HANDL_CALIB_DAC_SHIFT}, - {"RF GAIN LF", SYSMENU_UINT8, (uint32_t *)&CALIBRATE.rf_out_power_lf, SYSMENU_HANDL_CALIB_RF_GAIN_LF}, //-V641 - {"RF GAIN HF LOW", SYSMENU_UINT8, (uint32_t *)&CALIBRATE.rf_out_power_hf_low, SYSMENU_HANDL_CALIB_RF_GAIN_HF_LOW}, //-V641 - {"RF GAIN HF", SYSMENU_UINT8, (uint32_t *)&CALIBRATE.rf_out_power_hf, SYSMENU_HANDL_CALIB_RF_GAIN_HF}, //-V641 - {"RF GAIN HF HIGH", SYSMENU_UINT8, (uint32_t *)&CALIBRATE.rf_out_power_hf_high, SYSMENU_HANDL_CALIB_RF_GAIN_HF_HIGH}, //-V641 - {"S METER", SYSMENU_INT16, (uint32_t *)&CALIBRATE.smeter_calibration, SYSMENU_HANDL_CALIB_S_METER}, - {"SWR TRANS RATE", SYSMENU_FLOAT32, (uint32_t *)&CALIBRATE.swr_trans_rate, SYSMENU_HANDL_CALIB_SWR_TRANS_RATE}, -}; -static const uint8_t sysmenu_calibration_item_count = sizeof(sysmenu_calibration_handlers) / sizeof(sysmenu_calibration_handlers[0]); - -static const struct sysmenu_item_handler sysmenu_services_handlers[] = -{ - {"Band SWR", SYSMENU_RUN, 0, SYSMENU_HANDL_SWR_BAND_START}, - {"HF SWR", SYSMENU_RUN, 0, SYSMENU_HANDL_SWR_HF_START}, -}; -static const uint8_t sysmenu_services_item_count = sizeof(sysmenu_services_handlers) / sizeof(sysmenu_services_handlers[0]); - -//COMMON MENU -static void drawSystemMenuElement(char *title, SystemMenuType type, uint32_t *value, bool onlyVal); -static void SYSMENU_WIFI_DrawSelectAPMenu(bool full_redraw); -static void SYSMENU_WIFI_SelectAPMenuMove(int8_t dir); -static void SYSMENU_WIFI_DrawAPpasswordMenu(bool full_redraw); -static void SYSMENU_WIFI_RotatePasswordChar(int8_t dir); -static void SYSMENU_TRX_DrawCallsignMenu(bool full_redraw); -static void SYSMENU_TRX_RotateCallsignChar(int8_t dir); - -static struct sysmenu_item_handler *sysmenu_handlers_selected = (struct sysmenu_item_handler*)&sysmenu_handlers[0]; -static uint8_t *sysmenu_item_count_selected = (uint8_t*)&sysmenu_item_count; -static uint8_t systemMenuIndex = 0; -static uint8_t systemMenuRootIndex = 0; -static uint16_t sysmenu_y = 5; -static uint8_t sysmenu_i = 0; -static bool sysmenu_onroot = true; -bool sysmenu_hiddenmenu_enabled = false; -static bool sysmenu_services_opened = false; -static bool sysmenu_infowindow_opened = false; - -static bool sysmenu_trx_setCallsign_menu_opened = false; -static uint8_t sysmenu_trx_selected_callsign_char_index = 0; - -//Time menu -static bool sysmenu_timeMenuOpened = false; -static uint8_t TimeMenuSelection = 0; - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wunused-parameter" - -//TRX MENU - -static void SYSMENU_HANDL_TRXMENU(int8_t direction) -{ - sysmenu_handlers_selected = (struct sysmenu_item_handler*)&sysmenu_trx_handlers[0]; - sysmenu_item_count_selected = (uint8_t*)&sysmenu_trx_item_count; - sysmenu_onroot = false; - systemMenuIndex = 0; - LCD_UpdateQuery.SystemMenuRedraw = true; -} - -void SYSMENU_TRX_RFPOWER_HOTKEY(void) -{ - sysmenu_handlers_selected = (struct sysmenu_item_handler*)&sysmenu_trx_handlers[0]; - sysmenu_item_count_selected = (uint8_t*)&sysmenu_trx_item_count; - sysmenu_onroot = false; - systemMenuIndex = 0; - LCD_redraw(false); -} - -void SYSMENU_TRX_STEP_HOTKEY(void) -{ - sysmenu_handlers_selected = (struct sysmenu_item_handler*)&sysmenu_trx_handlers[0]; - sysmenu_item_count_selected = (uint8_t*)&sysmenu_trx_item_count; - sysmenu_onroot = false; - systemMenuIndex = 7; - if (TRX.Fast) - systemMenuIndex = 8; - LCD_redraw(false); -} - -static void SYSMENU_HANDL_TRX_BandMap(int8_t direction) -{ - if (direction > 0) - TRX.BandMapEnabled = true; - if (direction < 0) - TRX.BandMapEnabled = false; -} - -static void SYSMENU_HANDL_TRX_AutoGain(int8_t direction) -{ - if (direction > 0) - TRX.AutoGain = true; - if (direction < 0) - TRX.AutoGain = false; - FPGA_NeedSendParams = true; -} - -static void SYSMENU_HANDL_TRX_TWO_SIGNAL_TUNE(int8_t direction) -{ - if (direction > 0) - TRX.TWO_SIGNAL_TUNE = true; - if (direction < 0) - TRX.TWO_SIGNAL_TUNE = false; -} - -static void SYSMENU_HANDL_TRX_RFPower(int8_t direction) -{ - TRX.RF_Power += direction; - if (TRX.RF_Power < 1) - TRX.RF_Power = 1; - if (TRX.RF_Power > 100) - TRX.RF_Power = 100; -} - -static void SYSMENU_HANDL_TRX_MICIN(int8_t direction) -{ - if (direction > 0) - TRX.InputType_MIC = true; - if (direction < 0) - TRX.InputType_MIC = false; - TRX.InputType_LINE = false; - TRX.InputType_USB = false; - LCD_UpdateQuery.SystemMenu = true; - TRX_Restart_Mode(); -} - -static void SYSMENU_HANDL_TRX_LINEIN(int8_t direction) -{ - if (direction > 0) - TRX.InputType_LINE = true; - if (direction < 0) - TRX.InputType_LINE = false; - TRX.InputType_MIC = false; - TRX.InputType_USB = false; - LCD_UpdateQuery.SystemMenu = true; - TRX_Restart_Mode(); -} - -static void SYSMENU_HANDL_TRX_USBIN(int8_t direction) -{ - if (direction > 0) - TRX.InputType_USB = true; - if (direction < 0) - TRX.InputType_USB = false; - TRX.InputType_MIC = false; - TRX.InputType_LINE = false; - LCD_UpdateQuery.SystemMenu = true; - TRX_Restart_Mode(); -} - -static void SYSMENU_HANDL_TRX_DEBUG_CONSOLE(int8_t direction) -{ - if (direction > 0) - TRX.Debug_Console = true; - if (direction < 0) - TRX.Debug_Console = false; -} - -static void SYSMENU_HANDL_TRX_SHIFT_INTERVAL(int8_t direction) -{ - TRX.SHIFT_INTERVAL += direction * 100; - if (TRX.SHIFT_INTERVAL < 100) - TRX.SHIFT_INTERVAL = 100; - if (TRX.SHIFT_INTERVAL > 10000) - TRX.SHIFT_INTERVAL = 10000; -} - -static void SYSMENU_HANDL_TRX_FRQ_STEP(int8_t direction) -{ - const uint16_t freq_steps[] = {1, 10, 25, 50, 100}; - for (uint8_t i = 0; i < ARRLENTH(freq_steps); i++) - if (TRX.FRQ_STEP == freq_steps[i]) - { - if (direction < 0) - { - if (i > 0) - TRX.FRQ_STEP = freq_steps[i - 1]; - else - TRX.FRQ_STEP = freq_steps[0]; - return; - } - else - { - if (i < (ARRLENTH(freq_steps) - 1)) - TRX.FRQ_STEP = freq_steps[i + 1]; - else - TRX.FRQ_STEP = freq_steps[ARRLENTH(freq_steps) - 1]; - return; - } - } - TRX.FRQ_STEP = freq_steps[0]; -} - -static void SYSMENU_HANDL_TRX_FRQ_FAST_STEP(int8_t direction) -{ - const uint16_t freq_steps[] = {10, 25, 50, 100, 500, 1000}; - for (uint8_t i = 0; i < ARRLENTH(freq_steps); i++) - if (TRX.FRQ_FAST_STEP == freq_steps[i]) - { - if (direction < 0) - { - if (i > 0) - TRX.FRQ_FAST_STEP = freq_steps[i - 1]; - else - TRX.FRQ_FAST_STEP = freq_steps[0]; - return; - } - else - { - if (i < (ARRLENTH(freq_steps) - 1)) - TRX.FRQ_FAST_STEP = freq_steps[i + 1]; - else - TRX.FRQ_FAST_STEP = freq_steps[ARRLENTH(freq_steps) - 1]; - return; - } - } - TRX.FRQ_FAST_STEP = freq_steps[0]; -} - -static void SYSMENU_HANDL_TRX_ENC_ACCELERATE(int8_t direction) -{ - if (direction > 0) - TRX.Encoder_Accelerate = true; - if (direction < 0) - TRX.Encoder_Accelerate = false; -} - -static void SYSMENU_HANDL_TRX_ATT_STEP(int8_t direction) -{ - TRX.ATT_STEP += direction; - if (TRX.ATT_STEP < 1) - TRX.ATT_STEP = 1; - if (TRX.ATT_STEP > 15) - TRX.ATT_STEP = 15; -} - -static void SYSMENU_TRX_DrawCallsignMenu(bool full_redraw) -{ - if (full_redraw) - { - LCDDriver_Fill(BG_COLOR); - LCDDriver_printText("CALLSIGN:", 5, 5, FG_COLOR, BG_COLOR, 2); - } - - LCDDriver_printText(TRX.CALLSIGN, 10, 37, COLOR_GREEN, BG_COLOR, 2); - LCDDriver_drawFastHLine(8 + sysmenu_trx_selected_callsign_char_index * 12, 54, 12, COLOR_RED); -} - -static void SYSMENU_TRX_RotateCallsignChar(int8_t dir) -{ - bool full_redraw = false; - if (TRX.CALLSIGN[sysmenu_trx_selected_callsign_char_index] == 0) - full_redraw = true; - TRX.CALLSIGN[sysmenu_trx_selected_callsign_char_index] += dir; - - // do not show special characters - if (TRX.CALLSIGN[sysmenu_trx_selected_callsign_char_index] >= 1 && TRX.CALLSIGN[sysmenu_trx_selected_callsign_char_index] <= 32 && dir > 0) - TRX.CALLSIGN[sysmenu_trx_selected_callsign_char_index] = 33; - if (TRX.CALLSIGN[sysmenu_trx_selected_callsign_char_index] >= 1 && TRX.CALLSIGN[sysmenu_trx_selected_callsign_char_index] <= 32 && dir < 0) - TRX.CALLSIGN[sysmenu_trx_selected_callsign_char_index] = 0; - if (TRX.CALLSIGN[sysmenu_trx_selected_callsign_char_index] >= 127) - TRX.CALLSIGN[sysmenu_trx_selected_callsign_char_index] = 0; - if (TRX.CALLSIGN[sysmenu_trx_selected_callsign_char_index] == 0) - full_redraw = true; - - if (full_redraw) - LCD_UpdateQuery.SystemMenuRedraw = true; - else - LCD_UpdateQuery.SystemMenu = true; -} - -static void SYSMENU_HANDL_TRX_SetCallsign(int8_t direction) -{ - sysmenu_trx_setCallsign_menu_opened = true; - SYSMENU_TRX_DrawCallsignMenu(true); - LCD_UpdateQuery.SystemMenuRedraw = true; -} - -static void SYSMENU_HANDL_TRX_TRANSV_ENABLE(int8_t direction) -{ - if (direction > 0) - TRX.Transverter_Enabled = true; - if (direction < 0) - TRX.Transverter_Enabled = false; -} - -static void SYSMENU_HANDL_TRX_TRANSV_OFFSET(int8_t direction) -{ - TRX.Transverter_Offset_Mhz += direction; - if (TRX.Transverter_Offset_Mhz < 1) - TRX.Transverter_Offset_Mhz = 1; - if (TRX.Transverter_Offset_Mhz > 500) - TRX.Transverter_Offset_Mhz = 500; -} - -//AUDIO MENU - -static void SYSMENU_HANDL_AUDIOMENU(int8_t direction) -{ - sysmenu_handlers_selected = (struct sysmenu_item_handler*)&sysmenu_audio_handlers[0]; - sysmenu_item_count_selected = (uint8_t*)&sysmenu_audio_item_count; - sysmenu_onroot = false; - systemMenuIndex = 0; - LCD_UpdateQuery.SystemMenuRedraw = true; -} - -void SYSMENU_AUDIO_VOLUME_HOTKEY(void) -{ - sysmenu_handlers_selected = (struct sysmenu_item_handler*)&sysmenu_audio_handlers[0]; - sysmenu_item_count_selected = (uint8_t*)&sysmenu_audio_item_count; - sysmenu_onroot = false; - systemMenuIndex = 0; - LCD_redraw(false); -} - -void SYSMENU_AUDIO_BW_SSB_HOTKEY(void) -{ - sysmenu_handlers_selected = (struct sysmenu_item_handler*)&sysmenu_audio_handlers[0]; - sysmenu_item_count_selected = (uint8_t*)&sysmenu_audio_item_count; - sysmenu_onroot = false; - systemMenuIndex = 8; - LCD_redraw(false); -} - -void SYSMENU_AUDIO_BW_CW_HOTKEY(void) -{ - sysmenu_handlers_selected = (struct sysmenu_item_handler*)&sysmenu_audio_handlers[0]; - sysmenu_item_count_selected = (uint8_t*)&sysmenu_audio_item_count; - sysmenu_onroot = false; - systemMenuIndex = 10; - LCD_redraw(false); -} - -void SYSMENU_AUDIO_BW_AM_HOTKEY(void) -{ - sysmenu_handlers_selected = (struct sysmenu_item_handler*)&sysmenu_audio_handlers[0]; - sysmenu_item_count_selected = (uint8_t*)&sysmenu_audio_item_count; - sysmenu_onroot = false; - systemMenuIndex = 11; - LCD_redraw(false); -} - -void SYSMENU_AUDIO_BW_FM_HOTKEY(void) -{ - sysmenu_handlers_selected = (struct sysmenu_item_handler*)&sysmenu_audio_handlers[0]; - sysmenu_item_count_selected = (uint8_t*)&sysmenu_audio_item_count; - sysmenu_onroot = false; - systemMenuIndex = 12; - LCD_redraw(false); -} - -void SYSMENU_AUDIO_HPF_SSB_HOTKEY(void) -{ - sysmenu_handlers_selected = (struct sysmenu_item_handler*)&sysmenu_audio_handlers[0]; - sysmenu_item_count_selected = (uint8_t*)&sysmenu_audio_item_count; - sysmenu_onroot = false; - systemMenuIndex = 7; - LCD_redraw(false); -} - -void SYSMENU_AUDIO_HPF_CW_HOTKEY(void) -{ - sysmenu_handlers_selected = (struct sysmenu_item_handler*)&sysmenu_audio_handlers[0]; - sysmenu_item_count_selected = (uint8_t*)&sysmenu_audio_item_count; - systemMenuIndex = 9; - LCD_redraw(false); -} - -void SYSMENU_AUDIO_SQUELCH_HOTKEY(void) -{ - sysmenu_handlers_selected = (struct sysmenu_item_handler*)&sysmenu_audio_handlers[0]; - sysmenu_item_count_selected = (uint8_t*)&sysmenu_audio_item_count; - sysmenu_onroot = false; - systemMenuIndex = 13; - LCD_redraw(false); -} - -void SYSMENU_AUDIO_AGC_HOTKEY(void) -{ - sysmenu_handlers_selected = (struct sysmenu_item_handler*)&sysmenu_audio_handlers[0]; - sysmenu_item_count_selected = (uint8_t*)&sysmenu_audio_item_count; - sysmenu_onroot = false; - systemMenuIndex = 21; - LCD_redraw(false); -} - -static void SYSMENU_HANDL_AUDIO_IFGain(int8_t direction) -{ - TRX.IF_Gain += direction; - if (TRX.IF_Gain < 1) - TRX.IF_Gain = 1; - if (TRX.IF_Gain > 80) - TRX.IF_Gain = 80; -} - -static void SYSMENU_HANDL_AUDIO_VOLUME(int8_t direction) -{ - TRX.Volume += direction; - if (TRX.Volume < 1) - TRX.Volume = 1; - if (TRX.Volume > 100) - TRX.Volume = 100; -} - -static void SYSMENU_HANDL_AUDIO_AGC_GAIN_TARGET(int8_t direction) -{ - TRX.AGC_GAIN_TARGET += direction; - if (TRX.AGC_GAIN_TARGET < -80) - TRX.AGC_GAIN_TARGET = -80; - if (TRX.AGC_GAIN_TARGET > -10) - TRX.AGC_GAIN_TARGET = -10; -} - -static void SYSMENU_HANDL_AUDIO_MIC_Gain(int8_t direction) -{ - TRX.MIC_GAIN += direction; - if (TRX.MIC_GAIN < 1) - TRX.MIC_GAIN = 1; - if (TRX.MIC_GAIN > 20) - TRX.MIC_GAIN = 20; -} - -static void SYSMENU_HANDL_AUDIO_DNR_THRES(int8_t direction) -{ - TRX.DNR_SNR_THRESHOLD += direction; - if (TRX.DNR_SNR_THRESHOLD < 1) - TRX.DNR_SNR_THRESHOLD = 1; - if (TRX.DNR_SNR_THRESHOLD > 100) - TRX.DNR_SNR_THRESHOLD = 100; -} - -static void SYSMENU_HANDL_AUDIO_DNR_AVERAGE(int8_t direction) -{ - TRX.DNR_AVERAGE += direction; - if (TRX.DNR_AVERAGE < 1) - TRX.DNR_AVERAGE = 1; - if (TRX.DNR_AVERAGE > 100) - TRX.DNR_AVERAGE = 100; -} - -static void SYSMENU_HANDL_AUDIO_DNR_MINMAL(int8_t direction) -{ - TRX.DNR_MINIMAL += direction; - if (TRX.DNR_MINIMAL < 1) - TRX.DNR_MINIMAL = 1; - if (TRX.DNR_MINIMAL > 100) - TRX.DNR_MINIMAL = 100; -} - -static void SYSMENU_HANDL_AUDIO_MIC_EQ_LOW(int8_t direction) -{ - TRX.MIC_EQ_LOW += direction; - if (TRX.MIC_EQ_LOW < -10) - TRX.MIC_EQ_LOW = -10; - if (TRX.MIC_EQ_LOW > 10) - TRX.MIC_EQ_LOW = 10; - NeedReinitAudioFilters = true; -} - -static void SYSMENU_HANDL_AUDIO_MIC_EQ_MID(int8_t direction) -{ - TRX.MIC_EQ_MID += direction; - if (TRX.MIC_EQ_MID < -10) - TRX.MIC_EQ_MID = -10; - if (TRX.MIC_EQ_MID > 10) - TRX.MIC_EQ_MID = 10; - NeedReinitAudioFilters = true; -} - -static void SYSMENU_HANDL_AUDIO_MIC_EQ_HIG(int8_t direction) -{ - TRX.MIC_EQ_HIG += direction; - if (TRX.MIC_EQ_HIG < -10) - TRX.MIC_EQ_HIG = -10; - if (TRX.MIC_EQ_HIG > 10) - TRX.MIC_EQ_HIG = 10; - NeedReinitAudioFilters = true; -} - -static void SYSMENU_HANDL_AUDIO_RX_EQ_LOW(int8_t direction) -{ - TRX.RX_EQ_LOW += direction; - if (TRX.RX_EQ_LOW < -10) - TRX.RX_EQ_LOW = -10; - if (TRX.RX_EQ_LOW > 10) - TRX.RX_EQ_LOW = 10; - NeedReinitAudioFilters = true; -} - -static void SYSMENU_HANDL_AUDIO_RX_EQ_MID(int8_t direction) -{ - TRX.RX_EQ_MID += direction; - if (TRX.RX_EQ_MID < -10) - TRX.RX_EQ_MID = -10; - if (TRX.RX_EQ_MID > 10) - TRX.RX_EQ_MID = 10; - NeedReinitAudioFilters = true; -} - -static void SYSMENU_HANDL_AUDIO_RX_EQ_HIG(int8_t direction) -{ - TRX.RX_EQ_HIG += direction; - if (TRX.RX_EQ_HIG < -10) - TRX.RX_EQ_HIG = -10; - if (TRX.RX_EQ_HIG > 10) - TRX.RX_EQ_HIG = 10; - NeedReinitAudioFilters = true; -} - -static void SYSMENU_HANDL_AUDIO_RX_AGC_SSB_Speed(int8_t direction) -{ - TRX.RX_AGC_SSB_speed += direction; - if (TRX.RX_AGC_SSB_speed < 1) - TRX.RX_AGC_SSB_speed = 1; - if (TRX.RX_AGC_SSB_speed > 20) - TRX.RX_AGC_SSB_speed = 20; -} - -static void SYSMENU_HANDL_AUDIO_RX_AGC_CW_Speed(int8_t direction) -{ - TRX.RX_AGC_CW_speed += direction; - if (TRX.RX_AGC_CW_speed < 1) - TRX.RX_AGC_CW_speed = 1; - if (TRX.RX_AGC_CW_speed > 20) - TRX.RX_AGC_CW_speed = 20; -} - -static void SYSMENU_HANDL_AUDIO_TX_AGCSpeed(int8_t direction) -{ - TRX.TX_AGC_speed += direction; - if (TRX.TX_AGC_speed < 1) - TRX.TX_AGC_speed = 1; - if (TRX.TX_AGC_speed > 10) - TRX.TX_AGC_speed = 10; -} - -static void SYSMENU_HANDL_AUDIO_FMSquelch(int8_t direction) -{ - if (direction < 0 && TRX.FM_SQL_threshold == 0) - return; - TRX.FM_SQL_threshold += direction; - if (TRX.FM_SQL_threshold > 10) - TRX.FM_SQL_threshold = 10; - - int8_t band = getBandFromFreq(CurrentVFO()->Freq, true); - if (band > 0) - TRX.BANDS_SAVED_SETTINGS[band].FM_SQL_threshold = TRX.FM_SQL_threshold; -} - -static void SYSMENU_HANDL_AUDIO_SSB_HPF_pass(int8_t direction) -{ - if (direction > 0) - { - if (TRX.SSB_HPF_Filter == 0) - TRX.SSB_HPF_Filter = 60; - else if (TRX.SSB_HPF_Filter == 60) - TRX.SSB_HPF_Filter = 100; - else if (TRX.SSB_HPF_Filter == 100) - TRX.SSB_HPF_Filter = 200; - else if (TRX.SSB_HPF_Filter == 200) - TRX.SSB_HPF_Filter = 300; - else if (TRX.SSB_HPF_Filter == 300) - TRX.SSB_HPF_Filter = 400; - else if (TRX.SSB_HPF_Filter == 400) - TRX.SSB_HPF_Filter = 500; - } - else - { - if (TRX.SSB_HPF_Filter == 60) - TRX.SSB_HPF_Filter = 0; - else if (TRX.SSB_HPF_Filter == 100) - TRX.SSB_HPF_Filter = 60; - else if (TRX.SSB_HPF_Filter == 200) - TRX.SSB_HPF_Filter = 100; - else if (TRX.SSB_HPF_Filter == 300) - TRX.SSB_HPF_Filter = 200; - else if (TRX.SSB_HPF_Filter == 400) - TRX.SSB_HPF_Filter = 300; - else if (TRX.SSB_HPF_Filter == 500) - TRX.SSB_HPF_Filter = 400; - } - TRX_setMode(SecondaryVFO()->Mode, SecondaryVFO()); - TRX_setMode(CurrentVFO()->Mode, CurrentVFO()); -} - -static void SYSMENU_HANDL_AUDIO_CW_HPF_pass(int8_t direction) -{ - if (direction > 0) - { - if (TRX.CW_HPF_Filter == 0) - TRX.CW_HPF_Filter = 60; - else if (TRX.CW_HPF_Filter == 60) - TRX.CW_HPF_Filter = 100; - } - else - { - if (TRX.CW_HPF_Filter == 60) - TRX.CW_HPF_Filter = 0; - else if (TRX.CW_HPF_Filter == 100) - TRX.CW_HPF_Filter = 60; - } - TRX_setMode(SecondaryVFO()->Mode, SecondaryVFO()); - TRX_setMode(CurrentVFO()->Mode, CurrentVFO()); -} - -static void SYSMENU_HANDL_AUDIO_CW_LPF_pass(int8_t direction) -{ - if (direction > 0) - { - if (TRX.CW_LPF_Filter == 100) - TRX.CW_LPF_Filter = 150; - else if (TRX.CW_LPF_Filter == 150) - TRX.CW_LPF_Filter = 200; - else if (TRX.CW_LPF_Filter == 200) - TRX.CW_LPF_Filter = 250; - else if (TRX.CW_LPF_Filter == 250) - TRX.CW_LPF_Filter = 300; - else if (TRX.CW_LPF_Filter == 300) - TRX.CW_LPF_Filter = 350; - else if (TRX.CW_LPF_Filter == 350) - TRX.CW_LPF_Filter = 400; - else if (TRX.CW_LPF_Filter == 400) - TRX.CW_LPF_Filter = 450; - else if (TRX.CW_LPF_Filter == 450) - TRX.CW_LPF_Filter = 500; - else if (TRX.CW_LPF_Filter == 500) - TRX.CW_LPF_Filter = 550; - else if (TRX.CW_LPF_Filter == 550) - TRX.CW_LPF_Filter = 600; - else if (TRX.CW_LPF_Filter == 600) - TRX.CW_LPF_Filter = 650; - else if (TRX.CW_LPF_Filter == 650) - TRX.CW_LPF_Filter = 700; - else if (TRX.CW_LPF_Filter == 700) - TRX.CW_LPF_Filter = 750; - else if (TRX.CW_LPF_Filter == 750) - TRX.CW_LPF_Filter = 800; - else if (TRX.CW_LPF_Filter == 800) - TRX.CW_LPF_Filter = 850; - else if (TRX.CW_LPF_Filter == 850) - TRX.CW_LPF_Filter = 900; - else if (TRX.CW_LPF_Filter == 900) - TRX.CW_LPF_Filter = 950; - else if (TRX.CW_LPF_Filter == 950) - TRX.CW_LPF_Filter = 1000; - } - else - { - if (TRX.CW_LPF_Filter == 1000) - TRX.CW_LPF_Filter = 950; - else if (TRX.CW_LPF_Filter == 950) - TRX.CW_LPF_Filter = 900; - else if (TRX.CW_LPF_Filter == 900) - TRX.CW_LPF_Filter = 850; - else if (TRX.CW_LPF_Filter == 850) - TRX.CW_LPF_Filter = 800; - else if (TRX.CW_LPF_Filter == 800) - TRX.CW_LPF_Filter = 750; - else if (TRX.CW_LPF_Filter == 750) - TRX.CW_LPF_Filter = 700; - else if (TRX.CW_LPF_Filter == 700) - TRX.CW_LPF_Filter = 650; - else if (TRX.CW_LPF_Filter == 650) - TRX.CW_LPF_Filter = 600; - else if (TRX.CW_LPF_Filter == 600) - TRX.CW_LPF_Filter = 550; - else if (TRX.CW_LPF_Filter == 550) - TRX.CW_LPF_Filter = 500; - else if (TRX.CW_LPF_Filter == 500) - TRX.CW_LPF_Filter = 450; - else if (TRX.CW_LPF_Filter == 450) - TRX.CW_LPF_Filter = 400; - else if (TRX.CW_LPF_Filter == 400) - TRX.CW_LPF_Filter = 350; - else if (TRX.CW_LPF_Filter == 350) - TRX.CW_LPF_Filter = 300; - else if (TRX.CW_LPF_Filter == 300) - TRX.CW_LPF_Filter = 250; - else if (TRX.CW_LPF_Filter == 250) - TRX.CW_LPF_Filter = 200; - else if (TRX.CW_LPF_Filter == 200) - TRX.CW_LPF_Filter = 150; - else if (TRX.CW_LPF_Filter == 150) - TRX.CW_LPF_Filter = 100; - } - - TRX_setMode(SecondaryVFO()->Mode, SecondaryVFO()); - TRX_setMode(CurrentVFO()->Mode, CurrentVFO()); -} - -static void SYSMENU_HANDL_AUDIO_SSB_LPF_pass(int8_t direction) -{ - if (direction > 0) - { - if (TRX.SSB_LPF_Filter == 0) - TRX.SSB_LPF_Filter = 1400; - - if (TRX.SSB_LPF_Filter == 1400) - TRX.SSB_LPF_Filter = 1600; - else if (TRX.SSB_LPF_Filter == 1600) - TRX.SSB_LPF_Filter = 1800; - else if (TRX.SSB_LPF_Filter == 1800) - TRX.SSB_LPF_Filter = 2100; - else if (TRX.SSB_LPF_Filter == 2100) - TRX.SSB_LPF_Filter = 2300; - else if (TRX.SSB_LPF_Filter == 2300) - TRX.SSB_LPF_Filter = 2500; - else if (TRX.SSB_LPF_Filter == 2500) - TRX.SSB_LPF_Filter = 2700; - else if (TRX.SSB_LPF_Filter == 2700) - TRX.SSB_LPF_Filter = 2900; - else if (TRX.SSB_LPF_Filter == 2900) - TRX.SSB_LPF_Filter = 3000; - else if (TRX.SSB_LPF_Filter == 3000) - TRX.SSB_LPF_Filter = 3200; - else if (TRX.SSB_LPF_Filter == 3200) - TRX.SSB_LPF_Filter = 3400; - } - else - { - if (TRX.SSB_LPF_Filter == 1600) - TRX.SSB_LPF_Filter = 1400; - else if (TRX.SSB_LPF_Filter == 1800) - TRX.SSB_LPF_Filter = 1600; - else if (TRX.SSB_LPF_Filter == 2100) - TRX.SSB_LPF_Filter = 1800; - else if (TRX.SSB_LPF_Filter == 2300) - TRX.SSB_LPF_Filter = 2100; - else if (TRX.SSB_LPF_Filter == 2500) - TRX.SSB_LPF_Filter = 2300; - else if (TRX.SSB_LPF_Filter == 2700) - TRX.SSB_LPF_Filter = 2500; - else if (TRX.SSB_LPF_Filter == 2900) - TRX.SSB_LPF_Filter = 2700; - else if (TRX.SSB_LPF_Filter == 3000) - TRX.SSB_LPF_Filter = 2900; - else if (TRX.SSB_LPF_Filter == 3200) - TRX.SSB_LPF_Filter = 3000; - else if (TRX.SSB_LPF_Filter == 3400) - TRX.SSB_LPF_Filter = 3200; - } - - TRX_setMode(SecondaryVFO()->Mode, SecondaryVFO()); - TRX_setMode(CurrentVFO()->Mode, CurrentVFO()); -} - -static void SYSMENU_HANDL_AUDIO_AM_LPF_pass(int8_t direction) -{ - if (direction > 0) - { - if (TRX.AM_LPF_Filter == 2100) - TRX.AM_LPF_Filter = 2300; - else if (TRX.AM_LPF_Filter == 2300) - TRX.AM_LPF_Filter = 2500; - else if (TRX.AM_LPF_Filter == 2500) - TRX.AM_LPF_Filter = 2700; - else if (TRX.AM_LPF_Filter == 2700) - TRX.AM_LPF_Filter = 2900; - else if (TRX.AM_LPF_Filter == 2900) - TRX.AM_LPF_Filter = 3000; - else if (TRX.AM_LPF_Filter == 3000) - TRX.AM_LPF_Filter = 3200; - else if (TRX.AM_LPF_Filter == 3200) - TRX.AM_LPF_Filter = 3400; - else if (TRX.AM_LPF_Filter == 3400) - TRX.AM_LPF_Filter = 3600; - else if (TRX.AM_LPF_Filter == 3600) - TRX.AM_LPF_Filter = 3800; - else if (TRX.AM_LPF_Filter == 3800) - TRX.AM_LPF_Filter = 4000; - else if (TRX.AM_LPF_Filter == 4000) - TRX.AM_LPF_Filter = 4500; - else if (TRX.AM_LPF_Filter == 4500) - TRX.AM_LPF_Filter = 5000; - else if (TRX.AM_LPF_Filter == 5000) - TRX.AM_LPF_Filter = 6000; - else if (TRX.AM_LPF_Filter == 6000) - TRX.AM_LPF_Filter = 7000; - else if (TRX.AM_LPF_Filter == 7000) - TRX.AM_LPF_Filter = 8000; - else if (TRX.AM_LPF_Filter == 8000) - TRX.AM_LPF_Filter = 9000; - else if (TRX.AM_LPF_Filter == 9000) - TRX.AM_LPF_Filter = 10000; - } - else - { - if (TRX.AM_LPF_Filter == 2300) - TRX.AM_LPF_Filter = 2100; - else if (TRX.AM_LPF_Filter == 2500) - TRX.AM_LPF_Filter = 2300; - else if (TRX.AM_LPF_Filter == 2700) - TRX.AM_LPF_Filter = 2500; - else if (TRX.AM_LPF_Filter == 2900) - TRX.AM_LPF_Filter = 2700; - else if (TRX.AM_LPF_Filter == 3000) - TRX.AM_LPF_Filter = 2900; - else if (TRX.AM_LPF_Filter == 3200) - TRX.AM_LPF_Filter = 3000; - else if (TRX.AM_LPF_Filter == 3400) - TRX.AM_LPF_Filter = 3200; - else if (TRX.AM_LPF_Filter == 3600) - TRX.AM_LPF_Filter = 3400; - else if (TRX.AM_LPF_Filter == 3800) - TRX.AM_LPF_Filter = 3400; - else if (TRX.AM_LPF_Filter == 4000) - TRX.AM_LPF_Filter = 3800; - else if (TRX.AM_LPF_Filter == 4500) - TRX.AM_LPF_Filter = 3800; - else if (TRX.AM_LPF_Filter == 5000) - TRX.AM_LPF_Filter = 4500; - else if (TRX.AM_LPF_Filter == 6000) - TRX.AM_LPF_Filter = 5000; - else if (TRX.AM_LPF_Filter == 7000) - TRX.AM_LPF_Filter = 6000; - else if (TRX.AM_LPF_Filter == 8000) - TRX.AM_LPF_Filter = 7000; - else if (TRX.AM_LPF_Filter == 9000) - TRX.AM_LPF_Filter = 8000; - else if (TRX.AM_LPF_Filter == 10000) - TRX.AM_LPF_Filter = 9000; - } - - TRX_setMode(SecondaryVFO()->Mode, SecondaryVFO()); - TRX_setMode(CurrentVFO()->Mode, CurrentVFO()); -} - -static void SYSMENU_HANDL_AUDIO_FM_LPF_pass(int8_t direction) -{ - if (direction > 0) - { - if (TRX.FM_LPF_Filter == 5000) - TRX.FM_LPF_Filter = 6000; - else if (TRX.FM_LPF_Filter == 6000) - TRX.FM_LPF_Filter = 7000; - else if (TRX.FM_LPF_Filter == 7000) - TRX.FM_LPF_Filter = 8000; - else if (TRX.FM_LPF_Filter == 8000) - TRX.FM_LPF_Filter = 9000; - else if (TRX.FM_LPF_Filter == 9000) - TRX.FM_LPF_Filter = 10000; - else if (TRX.FM_LPF_Filter == 10000) - TRX.FM_LPF_Filter = 15000; - else if (TRX.FM_LPF_Filter == 15000) - TRX.FM_LPF_Filter = 20000; - } - else - { - if (TRX.FM_LPF_Filter == 6000) - TRX.FM_LPF_Filter = 5000; - else if (TRX.FM_LPF_Filter == 7000) - TRX.FM_LPF_Filter = 6000; - else if (TRX.FM_LPF_Filter == 8000) - TRX.FM_LPF_Filter = 7000; - else if (TRX.FM_LPF_Filter == 9000) - TRX.FM_LPF_Filter = 8000; - else if (TRX.FM_LPF_Filter == 10000) - TRX.FM_LPF_Filter = 9000; - else if (TRX.FM_LPF_Filter == 15000) - TRX.FM_LPF_Filter = 10000; - else if (TRX.FM_LPF_Filter == 20000) - TRX.FM_LPF_Filter = 15000; - } - - TRX_setMode(SecondaryVFO()->Mode, SecondaryVFO()); - TRX_setMode(CurrentVFO()->Mode, CurrentVFO()); -} - -static void SYSMENU_HANDL_AUDIO_Beeper(int8_t direction) -{ - if (direction > 0) - TRX.Beeper = true; - if (direction < 0) - TRX.Beeper = false; -} - -//CW MENU - -static void SYSMENU_HANDL_CWMENU(int8_t direction) -{ - sysmenu_handlers_selected = (struct sysmenu_item_handler*)&sysmenu_cw_handlers[0]; - sysmenu_item_count_selected = (uint8_t*)&sysmenu_cw_item_count; - sysmenu_onroot = false; - systemMenuIndex = 0; - LCD_redraw(false); -} - -void SYSMENU_CW_WPM_HOTKEY(void) -{ - sysmenu_handlers_selected = (struct sysmenu_item_handler*)&sysmenu_cw_handlers[0]; - sysmenu_item_count_selected = (uint8_t*)&sysmenu_cw_item_count; - sysmenu_onroot = false; - systemMenuIndex = 4; - LCD_redraw(false); -} - -void SYSMENU_CW_KEYER_HOTKEY(void) -{ - sysmenu_handlers_selected = (struct sysmenu_item_handler*)&sysmenu_cw_handlers[0]; - sysmenu_item_count_selected = (uint8_t*)&sysmenu_cw_item_count; - sysmenu_onroot = false; - systemMenuIndex = 3; - LCD_redraw(false); -} - -static void SYSMENU_HANDL_CW_GENERATOR_SHIFT_HZ(int8_t direction) -{ - TRX.CW_GENERATOR_SHIFT_HZ += direction * 100; - if (TRX.CW_GENERATOR_SHIFT_HZ < 100) - TRX.CW_GENERATOR_SHIFT_HZ = 100; - if (TRX.CW_GENERATOR_SHIFT_HZ > 10000) - TRX.CW_GENERATOR_SHIFT_HZ = 10000; -} - -static void SYSMENU_HANDL_CW_Key_timeout(int8_t direction) -{ - TRX.CW_Key_timeout += direction * 50; - if (TRX.CW_Key_timeout < 50) - TRX.CW_Key_timeout = 50; - if (TRX.CW_Key_timeout > 5000) - TRX.CW_Key_timeout = 5000; -} - -static void SYSMENU_HANDL_CW_Keyer(int8_t direction) -{ - if (direction > 0) - TRX.CW_KEYER = true; - if (direction < 0) - TRX.CW_KEYER = false; -} - -static void SYSMENU_HANDL_CW_Keyer_WPM(int8_t direction) -{ - TRX.CW_KEYER_WPM += direction; - if (TRX.CW_KEYER_WPM < 1) - TRX.CW_KEYER_WPM = 1; - if (TRX.CW_KEYER_WPM > 200) - TRX.CW_KEYER_WPM = 200; -} - -static void SYSMENU_HANDL_CW_SelfHear(int8_t direction) -{ - if (direction > 0) - TRX.CW_SelfHear = true; - if (direction < 0) - TRX.CW_SelfHear = false; -} - -static void SYSMENU_HANDL_CW_GaussFilter(int8_t direction) -{ - if (direction > 0) - TRX.CW_GaussFilter = true; - if (direction < 0) - TRX.CW_GaussFilter = false; - NeedReinitAudioFilters = true; -} - -//SCREEN MENU - -static void SYSMENU_HANDL_LCDMENU(int8_t direction) -{ - sysmenu_handlers_selected = (struct sysmenu_item_handler*)&sysmenu_screen_handlers[0]; - sysmenu_item_count_selected = (uint8_t*)&sysmenu_screen_item_count; - sysmenu_onroot = false; - systemMenuIndex = 0; - LCD_UpdateQuery.SystemMenuRedraw = true; -} - -static void SYSMENU_HANDL_SCREEN_FFT_Enabled(int8_t direction) -{ - if (direction > 0) - TRX.FFT_Enabled = true; - if (direction < 0) - TRX.FFT_Enabled = false; -} - -static void SYSMENU_HANDL_SCREEN_COLOR_THEME(int8_t direction) -{ - if(direction > 0 || TRX.ColorThemeId > 0) - TRX.ColorThemeId += direction; - if (TRX.ColorThemeId > (COLOR_THEMES_COUNT - 1)) - TRX.ColorThemeId = (COLOR_THEMES_COUNT - 1); - - COLOR = &COLOR_THEMES[TRX.ColorThemeId]; - FFT_Init(); - LCD_redraw(false); -} - -static void SYSMENU_HANDL_SCREEN_FFT_Compressor(int8_t direction) -{ - if (direction > 0) - TRX.FFT_Compressor = true; - if (direction < 0) - TRX.FFT_Compressor = false; -} - -static void SYSMENU_HANDL_SCREEN_FFT_Averaging(int8_t direction) -{ - TRX.FFT_Averaging += direction; - if (TRX.FFT_Averaging < 1) - TRX.FFT_Averaging = 1; - if (TRX.FFT_Averaging > 10) - TRX.FFT_Averaging = 10; -} - -static void SYSMENU_HANDL_SCREEN_FFT_Window(int8_t direction) -{ - TRX.FFT_Window += direction; - if (TRX.FFT_Window < 1) - TRX.FFT_Window = 1; - if (TRX.FFT_Window > 3) - TRX.FFT_Window = 3; - FFT_PreInit(); - FFT_Init(); -} - -static void SYSMENU_HANDL_SCREEN_FFT_Zoom(int8_t direction) -{ - if (direction > 0) - { - if (TRX.FFT_Zoom == 1) - TRX.FFT_Zoom = 2; - else if (TRX.FFT_Zoom == 2) - TRX.FFT_Zoom = 4; - else if (TRX.FFT_Zoom == 4) - TRX.FFT_Zoom = 8; - else if (TRX.FFT_Zoom == 8) - TRX.FFT_Zoom = 16; - } - else - { - if (TRX.FFT_Zoom == 2) - TRX.FFT_Zoom = 1; - else if (TRX.FFT_Zoom == 4) - TRX.FFT_Zoom = 2; - else if (TRX.FFT_Zoom == 8) - TRX.FFT_Zoom = 4; - else if (TRX.FFT_Zoom == 16) - TRX.FFT_Zoom = 8; - } - FFT_Init(); -} - -static void SYSMENU_HANDL_SCREEN_FFT_Color(int8_t direction) -{ - TRX.FFT_Color += direction; - if (TRX.FFT_Color < 1) - TRX.FFT_Color = 1; - if (TRX.FFT_Color > 7) - TRX.FFT_Color = 7; - FFT_Init(); -} - -static void SYSMENU_HANDL_SCREEN_FFT_Grid(int8_t direction) -{ - TRX.FFT_Grid += direction; - if (TRX.FFT_Grid < 0) - TRX.FFT_Grid = 0; - if (TRX.FFT_Grid > 3) - TRX.FFT_Grid = 3; - FFT_Init(); -} - -static void SYSMENU_HANDL_SCREEN_FFT_Background(int8_t direction) -{ - if (direction > 0) - TRX.FFT_Background = true; - if (direction < 0) - TRX.FFT_Background = false; -} - -//ADC/DAC MENU - -static void SYSMENU_HANDL_ADCMENU(int8_t direction) -{ - sysmenu_handlers_selected = (struct sysmenu_item_handler*)&sysmenu_adc_handlers[0]; - sysmenu_item_count_selected = (uint8_t*)&sysmenu_adc_item_count; - sysmenu_onroot = false; - systemMenuIndex = 0; - LCD_UpdateQuery.SystemMenuRedraw = true; -} - -static void SYSMENU_HANDL_ADC_DRIVER(int8_t direction) -{ - if (direction > 0) - TRX.ADC_Driver = true; - if (direction < 0) - TRX.ADC_Driver = false; - int8_t band = getBandFromFreq(CurrentVFO()->Freq, true); - if (band > 0) - TRX.BANDS_SAVED_SETTINGS[band].ADC_Driver = TRX.ADC_Driver; - FPGA_NeedSendParams = true; -} - -static void SYSMENU_HANDL_ADC_SHDN(int8_t direction) -{ - if (direction > 0) - TRX.ADC_SHDN = true; - if (direction < 0) - TRX.ADC_SHDN = false; - FPGA_NeedSendParams = true; -} - -//SET TIME MENU - -static void SYSMENU_HANDL_SETTIME(int8_t direction) -{ - if (!sysmenu_timeMenuOpened) - LCDDriver_Fill(BG_COLOR); - sysmenu_timeMenuOpened = true; - static uint8_t Hours; - static uint8_t Minutes; - static uint8_t Seconds; - static uint32_t Time; - char ctmp[50]; - Time = RTC->TR; - Hours = ((Time >> 20) & 0x03) * 10 + ((Time >> 16) & 0x0f); - Minutes = ((Time >> 12) & 0x07) * 10 + ((Time >> 8) & 0x0f); - Seconds = ((Time >> 4) & 0x07) * 10 + ((Time >> 0) & 0x0f); - if (direction != 0) - { - if (TimeMenuSelection == 0) - { - if (Hours == 0 && direction < 0) - return; - Hours = (uint8_t)(Hours + direction); - } - if (TimeMenuSelection == 1) - { - if (Minutes == 0 && direction < 0) - return; - Minutes = (uint8_t)(Minutes + direction); - } - if (TimeMenuSelection == 2) - { - if (Seconds == 0 && direction < 0) - return; - Seconds = (uint8_t)(Seconds + direction); - } - if (Hours >= 24) - Hours = 0; - if (Minutes >= 60) - Minutes = 0; - if (Seconds >= 60) - Seconds = 0; - RTC_TimeTypeDef sTime; - sTime.TimeFormat = RTC_HOURFORMAT12_PM; - sTime.SubSeconds = 0; - sTime.SecondFraction = 0; - sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE; - sTime.StoreOperation = RTC_STOREOPERATION_SET; - sTime.Hours = Hours; - sTime.Minutes = Minutes; - sTime.Seconds = Seconds; - BKPSRAM_Enable(); - HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN); - } - sprintf(ctmp, "%d", Hours); - addSymbols(ctmp, ctmp, 2, "0", false); - LCDDriver_printText(ctmp, 76, 100, COLOR->BUTTON_TEXT, TimeMenuSelection == 0 ? FG_COLOR : BG_COLOR, 3); - LCDDriver_printText(":", 124, 100, COLOR->BUTTON_TEXT, BG_COLOR, 3); - sprintf(ctmp, "%d", Minutes); - addSymbols(ctmp, ctmp, 2, "0", false); - LCDDriver_printText(ctmp, 148, 100, COLOR->BUTTON_TEXT, TimeMenuSelection == 1 ? FG_COLOR : BG_COLOR, 3); - LCDDriver_printText(":", 194, 100, COLOR->BUTTON_TEXT, BG_COLOR, 3); - sprintf(ctmp, "%d", Seconds); - addSymbols(ctmp, ctmp, 2, "0", false); - LCDDriver_printText(ctmp, 220, 100, COLOR->BUTTON_TEXT, TimeMenuSelection == 2 ? FG_COLOR : BG_COLOR, 3); -} - -//FLASH MENU - -static void SYSMENU_HANDL_Bootloader(int8_t direction) -{ - WM8731_CleanBuffer(); - TRX_NeedGoToBootloader = true; - TRX_Inited = false; - LCD_busy = true; -} - -#pragma GCC diagnostic ignored "-Wsign-conversion" - -//CALIBRATION MENU - -static void SYSMENU_HANDL_CALIB_ENCODER_INVERT(int8_t direction) -{ - if (direction > 0) - CALIBRATE.ENCODER_INVERT = true; - if (direction < 0) - CALIBRATE.ENCODER_INVERT = false; -} - -static void SYSMENU_HANDL_CALIB_ENCODER2_INVERT(int8_t direction) -{ - if (direction > 0) - CALIBRATE.ENCODER2_INVERT = true; - if (direction < 0) - CALIBRATE.ENCODER2_INVERT = false; -} - -static void SYSMENU_HANDL_CALIB_ENCODER_DEBOUNCE(int8_t direction) -{ - if (CALIBRATE.ENCODER_DEBOUNCE > 0 || direction > 0) - CALIBRATE.ENCODER_DEBOUNCE += direction; - if (CALIBRATE.ENCODER_DEBOUNCE > 250) - CALIBRATE.ENCODER_DEBOUNCE = 250; -} - -static void SYSMENU_HANDL_CALIB_ENCODER2_DEBOUNCE(int8_t direction) -{ - if (CALIBRATE.ENCODER2_DEBOUNCE > 0 || direction > 0) - CALIBRATE.ENCODER2_DEBOUNCE += direction; - if (CALIBRATE.ENCODER2_DEBOUNCE > 250) - CALIBRATE.ENCODER2_DEBOUNCE = 250; -} - -static void SYSMENU_HANDL_CALIB_ENCODER_SLOW_RATE(int8_t direction) -{ - CALIBRATE.ENCODER_SLOW_RATE += direction; - if (CALIBRATE.ENCODER_SLOW_RATE < 1) - CALIBRATE.ENCODER_SLOW_RATE = 1; - if (CALIBRATE.ENCODER_SLOW_RATE > 100) - CALIBRATE.ENCODER_SLOW_RATE = 100; -} - -static void SYSMENU_HANDL_CALIB_ENCODER_ON_FALLING(int8_t direction) -{ - if (direction > 0) - CALIBRATE.ENCODER_ON_FALLING = true; - if (direction < 0) - CALIBRATE.ENCODER_ON_FALLING = false; -} - -static void SYSMENU_HANDL_CALIBRATIONMENU(int8_t direction) -{ - if (!sysmenu_hiddenmenu_enabled) - return; - sysmenu_handlers_selected = (struct sysmenu_item_handler*)&sysmenu_calibration_handlers[0]; - sysmenu_item_count_selected = (uint8_t*)&sysmenu_calibration_item_count; - sysmenu_onroot = false; - systemMenuIndex = 0; - LCD_UpdateQuery.SystemMenuRedraw = true; -} - -static void SYSMENU_HANDL_CALIB_CIC_SHIFT(int8_t direction) -{ - CALIBRATE.CIC_GAINER_val += direction; - if (CALIBRATE.CIC_GAINER_val < 16) - CALIBRATE.CIC_GAINER_val = 16; - if (CALIBRATE.CIC_GAINER_val > 86) - CALIBRATE.CIC_GAINER_val = 86; -} - -static void SYSMENU_HANDL_CALIB_CICCOMP_SHIFT(int8_t direction) -{ - CALIBRATE.CICFIR_GAINER_val += direction; - if (CALIBRATE.CICFIR_GAINER_val < 16) - CALIBRATE.CICFIR_GAINER_val = 16; - if (CALIBRATE.CICFIR_GAINER_val > 30) - CALIBRATE.CICFIR_GAINER_val = 30; -} - -static void SYSMENU_HANDL_CALIB_TXCICCOMP_SHIFT(int8_t direction) -{ - CALIBRATE.TXCICFIR_GAINER_val += direction; - if (CALIBRATE.TXCICFIR_GAINER_val < 16) - CALIBRATE.TXCICFIR_GAINER_val = 16; - if (CALIBRATE.TXCICFIR_GAINER_val > 30) - CALIBRATE.TXCICFIR_GAINER_val = 30; -} - -static void SYSMENU_HANDL_CALIB_DAC_SHIFT(int8_t direction) -{ - CALIBRATE.DAC_GAINER_val += direction; - if (CALIBRATE.DAC_GAINER_val < 14) - CALIBRATE.DAC_GAINER_val = 14; - if (CALIBRATE.DAC_GAINER_val > 28) - CALIBRATE.DAC_GAINER_val = 28; -} - -static void SYSMENU_HANDL_CALIB_RF_GAIN_LF(int8_t direction) -{ - if (CALIBRATE.rf_out_power_lf > 0) - CALIBRATE.rf_out_power_lf += direction; - if (CALIBRATE.rf_out_power_lf == 0 && direction > 0) - CALIBRATE.rf_out_power_lf += direction; - if (CALIBRATE.rf_out_power_lf > 100) - CALIBRATE.rf_out_power_lf = 100; - - TRX_MAX_TX_Amplitude = getMaxTXAmplitudeOnFreq(CurrentVFO()->Freq); -} - -static void SYSMENU_HANDL_CALIB_RF_GAIN_HF_LOW(int8_t direction) -{ - if (CALIBRATE.rf_out_power_hf_low > 0) - CALIBRATE.rf_out_power_hf_low += direction; - if (CALIBRATE.rf_out_power_hf_low == 0 && direction > 0) - CALIBRATE.rf_out_power_hf_low += direction; - if (CALIBRATE.rf_out_power_hf_low > 100) - CALIBRATE.rf_out_power_hf_low = 100; - - TRX_MAX_TX_Amplitude = getMaxTXAmplitudeOnFreq(CurrentVFO()->Freq); -} - -static void SYSMENU_HANDL_CALIB_RF_GAIN_HF(int8_t direction) -{ - if (CALIBRATE.rf_out_power_hf > 0) - CALIBRATE.rf_out_power_hf += direction; - if (CALIBRATE.rf_out_power_hf == 0 && direction > 0) - CALIBRATE.rf_out_power_hf += direction; - if (CALIBRATE.rf_out_power_hf > 100) - CALIBRATE.rf_out_power_hf = 100; - - TRX_MAX_TX_Amplitude = getMaxTXAmplitudeOnFreq(CurrentVFO()->Freq); -} - -static void SYSMENU_HANDL_CALIB_RF_GAIN_HF_HIGH(int8_t direction) -{ - if (CALIBRATE.rf_out_power_hf_high > 0) - CALIBRATE.rf_out_power_hf_high += direction; - if (CALIBRATE.rf_out_power_hf_high == 0 && direction > 0) - CALIBRATE.rf_out_power_hf_high += direction; - if (CALIBRATE.rf_out_power_hf_high > 100) - CALIBRATE.rf_out_power_hf_high = 100; - - TRX_MAX_TX_Amplitude = getMaxTXAmplitudeOnFreq(CurrentVFO()->Freq); -} - -static void SYSMENU_HANDL_CALIB_RF_GAIN_VHF(int8_t direction) -{ - if (CALIBRATE.rf_out_power_vhf > 0) - CALIBRATE.rf_out_power_vhf += direction; - if (CALIBRATE.rf_out_power_vhf == 0 && direction > 0) - CALIBRATE.rf_out_power_vhf += direction; - if (CALIBRATE.rf_out_power_vhf > 100) - CALIBRATE.rf_out_power_vhf = 100; - - TRX_MAX_TX_Amplitude = getMaxTXAmplitudeOnFreq(CurrentVFO()->Freq); -} - -static void SYSMENU_HANDL_CALIB_S_METER(int8_t direction) -{ - CALIBRATE.smeter_calibration += direction; - if (CALIBRATE.smeter_calibration < -50) - CALIBRATE.smeter_calibration = -50; - if (CALIBRATE.smeter_calibration > 50) - CALIBRATE.smeter_calibration = 50; -} - -#pragma GCC diagnostic ignored "-Wsign-conversion" - -static void SYSMENU_HANDL_CALIB_SWR_TRANS_RATE(int8_t direction) -{ - CALIBRATE.swr_trans_rate += (float32_t)direction * 0.1f; - if (CALIBRATE.swr_trans_rate < 1.0f) - CALIBRATE.swr_trans_rate = 1.0f; - if (CALIBRATE.swr_trans_rate > 50.0f) - CALIBRATE.swr_trans_rate = 50.0f; -} - -//SERVICES -void SYSMENU_HANDL_SERVICESMENU(int8_t direction) -{ - sysmenu_services_opened = true; - sysmenu_handlers_selected = (struct sysmenu_item_handler*)&sysmenu_services_handlers[0]; - sysmenu_item_count_selected = (uint8_t*)&sysmenu_services_item_count; - sysmenu_onroot = false; - systemMenuIndex = 0; - LCD_redraw(false); -} - -//SWR BAND ANALYZER -static void SYSMENU_HANDL_SWR_BAND_START(int8_t direction) -{ - if (sysmenu_swr_opened) - { - SWR_EncRotate(direction); - } - else - { - sysmenu_swr_opened = true; - int8_t band = getBandFromFreq(CurrentVFO()->Freq, true); - SWR_Start(BANDS[band].startFreq - 100000, BANDS[band].endFreq + 100000); - LCD_UpdateQuery.SystemMenuRedraw = true; - } -} - -//SWR HF ANALYZER -static void SYSMENU_HANDL_SWR_HF_START(int8_t direction) -{ - if (sysmenu_swr_opened) - { - SWR_EncRotate(direction); - } - else - { - sysmenu_swr_opened = true; - SWR_Start(1000000, 60000000); - LCD_UpdateQuery.SystemMenuRedraw = true; - } -} - -//COMMON MENU FUNCTIONS -void SYSMENU_drawSystemMenu(bool draw_background) -{ - if (LCD_busy) - { - LCD_UpdateQuery.SystemMenu = true; - if(draw_background) - LCD_UpdateQuery.SystemMenuRedraw = true; - return; - } - if (!LCD_systemMenuOpened) - return; - if (sysmenu_timeMenuOpened) - { - SYSMENU_HANDL_SETTIME(0); - } - else if (sysmenu_trx_setCallsign_menu_opened) - { - SYSMENU_TRX_DrawCallsignMenu(draw_background); - } - else if (sysmenu_swr_opened) - { - SWR_Draw(); - } - else if (sysmenu_infowindow_opened) - { - - } - else - { - LCD_busy = true; - - sysmenu_i = 0; - sysmenu_y = 5; - - if (draw_background) - LCDDriver_Fill(BG_COLOR); - - uint8_t current_selected_page = systemMenuIndex / LAY_SYSMENU_MAX_ITEMS_ON_PAGE; - if (current_selected_page * LAY_SYSMENU_MAX_ITEMS_ON_PAGE > *sysmenu_item_count_selected) - current_selected_page = 0; - - for (uint8_t m = 0; m < *sysmenu_item_count_selected; m++) - { - uint8_t current_page = m / LAY_SYSMENU_MAX_ITEMS_ON_PAGE; - if (current_selected_page == current_page) - drawSystemMenuElement(sysmenu_handlers_selected[m].title, sysmenu_handlers_selected[m].type, sysmenu_handlers_selected[m].value, false); - } - - LCD_busy = false; - } - - LCD_UpdateQuery.SystemMenu = false; - if(draw_background) - LCD_UpdateQuery.SystemMenuRedraw = false; -} - -void eventRotateSystemMenu(int8_t direction) -{ - if (sysmenu_trx_setCallsign_menu_opened) - { - SYSMENU_TRX_RotateCallsignChar(direction); - return; - } - if (sysmenu_timeMenuOpened) - { - SYSMENU_HANDL_SETTIME(direction); - return; - } - if (sysmenu_handlers_selected[systemMenuIndex].type != SYSMENU_INFOLINE) - sysmenu_handlers_selected[systemMenuIndex].menuHandler(direction); - if (sysmenu_handlers_selected[systemMenuIndex].type != SYSMENU_RUN) - LCD_UpdateQuery.SystemMenuCurrent = true; -} - -void eventCloseSystemMenu(void) -{ - if (sysmenu_trx_setCallsign_menu_opened) - { - sysmenu_trx_setCallsign_menu_opened = false; - systemMenuIndex = 0; - SYSMENU_drawSystemMenu(true); - } - else if (sysmenu_timeMenuOpened) - { - sysmenu_timeMenuOpened = false; - systemMenuIndex = 0; - SYSMENU_drawSystemMenu(true); - } - else if (sysmenu_swr_opened) - { - sysmenu_swr_opened = false; - SWR_Stop(); - systemMenuIndex = 0; - SYSMENU_drawSystemMenu(true); - } - else if (sysmenu_infowindow_opened) - { - sysmenu_infowindow_opened = false; - systemMenuIndex = 0; - SYSMENU_drawSystemMenu(true); - } - else if (sysmenu_services_opened) - { - sysmenu_handlers_selected = (struct sysmenu_item_handler*)&sysmenu_handlers[0]; - sysmenu_item_count_selected = (uint8_t*)&sysmenu_item_count; - sysmenu_onroot = true; - systemMenuIndex = systemMenuRootIndex; - sysmenu_services_opened = false; - LCD_systemMenuOpened = false; - LCD_UpdateQuery.Background = true; - LCD_redraw(false); - } - else - { - if (sysmenu_onroot) - { - LCD_systemMenuOpened = false; - LCD_UpdateQuery.Background = true; - LCD_redraw(false); - } - else - { - sysmenu_handlers_selected = (struct sysmenu_item_handler*)&sysmenu_handlers[0]; - sysmenu_item_count_selected = (uint8_t*)&sysmenu_item_count; - sysmenu_onroot = true; - systemMenuIndex = systemMenuRootIndex; - SYSMENU_drawSystemMenu(true); - } - } - NeedSaveSettings = true; - if (sysmenu_hiddenmenu_enabled) - NeedSaveCalibration = true; -} - -void eventCloseAllSystemMenu(void) -{ - sysmenu_handlers_selected = (struct sysmenu_item_handler*)&sysmenu_handlers[0]; - sysmenu_item_count_selected = (uint8_t*)&sysmenu_item_count; - sysmenu_onroot = true; - systemMenuIndex = systemMenuRootIndex; - LCD_systemMenuOpened = false; - LCD_UpdateQuery.Background = true; - LCD_redraw(false); -} - -void eventSecRotateSystemMenu(int8_t direction) -{ - //Callsign menu - if (sysmenu_trx_setCallsign_menu_opened) - { - if (direction < 0 && sysmenu_trx_selected_callsign_char_index > 0) - { - sysmenu_trx_selected_callsign_char_index--; - SYSMENU_TRX_DrawCallsignMenu(true); - } - else if (sysmenu_trx_selected_callsign_char_index < (MAX_CALLSIGN_LENGTH - 1)) - { - sysmenu_trx_selected_callsign_char_index++; - SYSMENU_TRX_DrawCallsignMenu(true); - } - return; - } - if (sysmenu_swr_opened) - return; - if (sysmenu_infowindow_opened) - return; - //time menu - if (sysmenu_timeMenuOpened) - { - LCDDriver_Fill(BG_COLOR); - if (direction < 0) - { - TimeMenuSelection--; - if (TimeMenuSelection > 2) - TimeMenuSelection = 2; - } - else - { - TimeMenuSelection++; - if (TimeMenuSelection == 3) - TimeMenuSelection = 0; - } - LCD_UpdateQuery.SystemMenu = true; - return; - } - //other - uint8_t current_page = systemMenuIndex / LAY_SYSMENU_MAX_ITEMS_ON_PAGE; - LCDDriver_drawFastHLine(0, (5 + (systemMenuIndex - current_page * LAY_SYSMENU_MAX_ITEMS_ON_PAGE) * LAY_SYSMENU_ITEM_HEIGHT) + 17, LAY_SYSMENU_W, BG_COLOR); - if (direction < 0) - { - if (systemMenuIndex > 0) - systemMenuIndex--; - else if (!sysmenu_hiddenmenu_enabled && sysmenu_onroot) - systemMenuIndex = *sysmenu_item_count_selected - 2; - else - systemMenuIndex = *sysmenu_item_count_selected - 1; - } - else - { - if (systemMenuIndex < (*sysmenu_item_count_selected - 1)) - { - systemMenuIndex++; - } - else - systemMenuIndex = 0; - } - if (!sysmenu_hiddenmenu_enabled && sysmenu_handlers_selected[systemMenuIndex].type == SYSMENU_HIDDEN_MENU) - systemMenuIndex = 0; - while (systemMenuIndex > 0 && sysmenu_handlers_selected[systemMenuIndex].type == SYSMENU_INFOLINE) - systemMenuIndex = 0; - - SYSMENU_redrawCurrentItem(); - if (sysmenu_onroot) - systemMenuRootIndex = systemMenuIndex; - uint8_t new_page = systemMenuIndex / LAY_SYSMENU_MAX_ITEMS_ON_PAGE; - - if (current_page != new_page) - SYSMENU_drawSystemMenu(true); -} - -void SYSMENU_redrawCurrentItem(void) -{ - uint8_t current_page = systemMenuIndex / LAY_SYSMENU_MAX_ITEMS_ON_PAGE; - sysmenu_i = (uint8_t)(systemMenuIndex - current_page * LAY_SYSMENU_MAX_ITEMS_ON_PAGE); - sysmenu_y = 5 + (systemMenuIndex - current_page * LAY_SYSMENU_MAX_ITEMS_ON_PAGE) * LAY_SYSMENU_ITEM_HEIGHT; - drawSystemMenuElement(sysmenu_handlers_selected[systemMenuIndex].title, sysmenu_handlers_selected[systemMenuIndex].type, sysmenu_handlers_selected[systemMenuIndex].value, true); -} - -static void drawSystemMenuElement(char *title, SystemMenuType type, uint32_t *value, bool onlyVal) -{ - if (!sysmenu_hiddenmenu_enabled && type == SYSMENU_HIDDEN_MENU) - return; - - char ctmp[10] = {0}; - if (!onlyVal) - { - LCDDriver_Fill_RectXY(0, sysmenu_y, LAY_SYSMENU_W, sysmenu_y + 17, BG_COLOR); - LCDDriver_printText(title, LAY_SYSMENU_X1, sysmenu_y, FG_COLOR, BG_COLOR, 2); - } - - uint16_t x_pos = LAY_SYSMENU_X2; - float32_t tmp_float = 0; - switch (type) - { - case SYSMENU_UINT8: - sprintf(ctmp, "%d", (uint8_t)*value); - break; - case SYSMENU_UINT16: - sprintf(ctmp, "%d", (uint16_t)*value); - break; - case SYSMENU_UINT32: - sprintf(ctmp, "%u", (uint32_t)*value); - x_pos = LAY_SYSMENU_X2_BIGINT; - break; - case SYSMENU_UINT32R: - sprintf(ctmp, "%u", (uint32_t)*value); - x_pos = LAY_SYSMENU_X2R_BIGINT; //-V1048 - break; - case SYSMENU_INT8: - sprintf(ctmp, "%d", (int8_t)*value); - break; - case SYSMENU_INT16: - sprintf(ctmp, "%d", (int16_t)*value); - break; - case SYSMENU_INT32: - sprintf(ctmp, "%d", (int32_t)*value); - x_pos = LAY_SYSMENU_X2_BIGINT; - break; - case SYSMENU_FLOAT32: - memcpy(&tmp_float, value, sizeof(float32_t)); - sprintf(ctmp, "%.2f", (double)tmp_float); - x_pos = LAY_SYSMENU_X2_BIGINT; - break; - case SYSMENU_BOOLEAN: - sprintf(ctmp, "%d", (int8_t)*value); - if ((uint8_t)*value == 1) - sprintf(ctmp, "YES"); - else - sprintf(ctmp, "NO"); - break; - case SYSMENU_RUN: - sprintf(ctmp, "RUN"); - break; - case SYSMENU_MENU: - sprintf(ctmp, "->"); - break; - case SYSMENU_HIDDEN_MENU: - sprintf(ctmp, "!!!"); - break; - case SYSMENU_INFOLINE: - break; - } - - if (onlyVal) - LCDDriver_Fill_RectWH(x_pos, sysmenu_y, 6 * 12, 13, BG_COLOR); - if (type != SYSMENU_INFOLINE) - LCDDriver_printText(ctmp, x_pos, sysmenu_y, FG_COLOR, BG_COLOR, 2); - - uint8_t current_selected_page = systemMenuIndex / LAY_SYSMENU_MAX_ITEMS_ON_PAGE; - if (systemMenuIndex == sysmenu_i + current_selected_page * LAY_SYSMENU_MAX_ITEMS_ON_PAGE) - LCDDriver_drawFastHLine(0, sysmenu_y + 17, LAY_SYSMENU_W, FG_COLOR); - sysmenu_i++; - sysmenu_y += LAY_SYSMENU_ITEM_HEIGHT; -} diff --git a/Src/system_menu.h b/Src/system_menu.h deleted file mode 100644 index 732ca4d..0000000 --- a/Src/system_menu.h +++ /dev/null @@ -1,53 +0,0 @@ -#ifndef SYSTEM_MENU_H -#define SYSTEM_MENU_H - -#include "stm32f4xx.h" -#include - -typedef enum -{ - SYSMENU_BOOLEAN = 0x01, - SYSMENU_RUN = 0x02, - SYSMENU_UINT8 = 0x03, - SYSMENU_UINT16 = 0x04, - SYSMENU_UINT32 = 0x05, - SYSMENU_UINT32R = 0x06, - SYSMENU_INT8 = 0x07, - SYSMENU_INT16 = 0x08, - SYSMENU_INT32 = 0x09, - SYSMENU_FLOAT32 = 0x0A, - SYSMENU_MENU = 0x0B, - SYSMENU_HIDDEN_MENU = 0x0C, - SYSMENU_INFOLINE = 0x0D, -} SystemMenuType; - -struct sysmenu_item_handler -{ - char *title; - SystemMenuType type; - uint32_t *value; - void (*menuHandler)(int8_t direction); -}; - -extern void SYSMENU_drawSystemMenu(bool draw_background); -extern void SYSMENU_redrawCurrentItem(void); -extern void eventRotateSystemMenu(int8_t direction); -extern void eventSecRotateSystemMenu(int8_t direction); -extern void eventCloseSystemMenu(void); -extern void eventCloseAllSystemMenu(void); -extern bool sysmenu_hiddenmenu_enabled; -extern void SYSMENU_TRX_RFPOWER_HOTKEY(void); -extern void SYSMENU_TRX_STEP_HOTKEY(void); -extern void SYSMENU_CW_WPM_HOTKEY(void); -extern void SYSMENU_CW_KEYER_HOTKEY(void); -extern void SYSMENU_AUDIO_VOLUME_HOTKEY(void); -extern void SYSMENU_AUDIO_BW_SSB_HOTKEY(void); -extern void SYSMENU_AUDIO_BW_CW_HOTKEY(void); -extern void SYSMENU_AUDIO_BW_AM_HOTKEY(void); -extern void SYSMENU_AUDIO_BW_FM_HOTKEY(void); -extern void SYSMENU_AUDIO_HPF_SSB_HOTKEY(void); -extern void SYSMENU_AUDIO_HPF_CW_HOTKEY(void); -extern void SYSMENU_AUDIO_SQUELCH_HOTKEY(void); -extern void SYSMENU_AUDIO_AGC_HOTKEY(void); - -#endif diff --git a/Src/system_stm32f4xx.c b/Src/system_stm32f4xx.c deleted file mode 100644 index a9cfc96..0000000 --- a/Src/system_stm32f4xx.c +++ /dev/null @@ -1,727 +0,0 @@ -/** - ****************************************************************************** - * @file system_stm32f4xx.c - * @author MCD Application Team - * @brief CMSIS Cortex-M4 Device Peripheral Access Layer System Source File. - * - * This file provides two functions and one global variable to be called from - * user application: - * - SystemInit(): This function is called at startup just after reset and - * before branch to main program. This call is made inside - * the "startup_stm32f4xx.s" file. - * - * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used - * by the user application to setup the SysTick - * timer or configure other parameters. - * - * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must - * be called whenever the core clock is changed - * during program execution. - * - * - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2017 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/** @addtogroup CMSIS - * @{ - */ - -/** @addtogroup stm32f4xx_system - * @{ - */ - -/** @addtogroup STM32F4xx_System_Private_Includes - * @{ - */ - - -#include "stm32f4xx.h" - -#if !defined (HSE_VALUE) - #define HSE_VALUE ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSI_VALUE) - #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @} - */ - -/** @addtogroup STM32F4xx_System_Private_TypesDefinitions - * @{ - */ - -/** - * @} - */ - -/** @addtogroup STM32F4xx_System_Private_Defines - * @{ - */ - -/************************* Miscellaneous Configuration ************************/ -/*!< Uncomment the following line if you need to use external SRAM or SDRAM as data memory */ -#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)\ - || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ - || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) -/* #define DATA_IN_ExtSRAM */ -#endif /* STM32F40xxx || STM32F41xxx || STM32F42xxx || STM32F43xxx || STM32F469xx || STM32F479xx ||\ - STM32F412Zx || STM32F412Vx */ - -#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ - || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) -/* #define DATA_IN_ExtSDRAM */ -#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx ||\ - STM32F479xx */ - -/*!< Uncomment the following line if you need to relocate your vector Table in - Internal SRAM. */ -/* #define VECT_TAB_SRAM */ -#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. - This value must be a multiple of 0x200. */ -/******************************************************************************/ - -/** - * @} - */ - -/** @addtogroup STM32F4xx_System_Private_Macros - * @{ - */ - -/** - * @} - */ - -/** @addtogroup STM32F4xx_System_Private_Variables - * @{ - */ - /* This variable is updated in three ways: - 1) by calling CMSIS function SystemCoreClockUpdate() - 2) by calling HAL API function HAL_RCC_GetHCLKFreq() - 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency - Note: If you use this function to configure the system clock; then there - is no need to call the 2 first functions listed above, since SystemCoreClock - variable is updated automatically. - */ -uint32_t SystemCoreClock = 16000000; -const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; -const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4}; -/** - * @} - */ - -/** @addtogroup STM32F4xx_System_Private_FunctionPrototypes - * @{ - */ - -#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) - static void SystemInit_ExtMemCtl(void); -#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */ - -/** - * @} - */ - -/** @addtogroup STM32F4xx_System_Private_Functions - * @{ - */ - -/** - * @brief Setup the microcontroller system - * Initialize the FPU setting, vector table location and External memory - * configuration. - * @param None - * @retval None - */ -void SystemInit(void) -{ - /* FPU settings ------------------------------------------------------------*/ - #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) - SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ - #endif - -#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) - SystemInit_ExtMemCtl(); -#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */ - - /* Configure the Vector Table location add offset address ------------------*/ -#ifdef VECT_TAB_SRAM - SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ -#else - SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ -#endif -} - -/** - * @brief Update SystemCoreClock variable according to Clock Register Values. - * The SystemCoreClock variable contains the core clock (HCLK), it can - * be used by the user application to setup the SysTick timer or configure - * other parameters. - * - * @note Each time the core clock (HCLK) changes, this function must be called - * to update SystemCoreClock variable value. Otherwise, any configuration - * based on this variable will be incorrect. - * - * @note - The system frequency computed by this function is not the real - * frequency in the chip. It is calculated based on the predefined - * constant and the selected clock source: - * - * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) - * - * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) - * - * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) - * or HSI_VALUE(*) multiplied/divided by the PLL factors. - * - * (*) HSI_VALUE is a constant defined in stm32f4xx_hal_conf.h file (default value - * 16 MHz) but the real value may vary depending on the variations - * in voltage and temperature. - * - * (**) HSE_VALUE is a constant defined in stm32f4xx_hal_conf.h file (its value - * depends on the application requirements), user has to ensure that HSE_VALUE - * is same as the real frequency of the crystal used. Otherwise, this function - * may have wrong result. - * - * - The result of this function could be not correct when using fractional - * value for HSE crystal. - * - * @param None - * @retval None - */ -void SystemCoreClockUpdate(void) -{ - uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; - - /* Get SYSCLK source -------------------------------------------------------*/ - tmp = RCC->CFGR & RCC_CFGR_SWS; - - switch (tmp) - { - case 0x00: /* HSI used as system clock source */ - SystemCoreClock = HSI_VALUE; - break; - case 0x04: /* HSE used as system clock source */ - SystemCoreClock = HSE_VALUE; - break; - case 0x08: /* PLL used as system clock source */ - - /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N - SYSCLK = PLL_VCO / PLL_P - */ - pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; - pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; - - if (pllsource != 0) - { - /* HSE used as PLL clock source */ - pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); - } - else - { - /* HSI used as PLL clock source */ - pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); - } - - pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; - SystemCoreClock = pllvco/pllp; - break; - default: - SystemCoreClock = HSI_VALUE; - break; - } - /* Compute HCLK frequency --------------------------------------------------*/ - /* Get HCLK prescaler */ - tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; - /* HCLK frequency */ - SystemCoreClock >>= tmp; -} - -#if defined (DATA_IN_ExtSRAM) && defined (DATA_IN_ExtSDRAM) -#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ - || defined(STM32F469xx) || defined(STM32F479xx) -/** - * @brief Setup the external memory controller. - * Called in startup_stm32f4xx.s before jump to main. - * This function configures the external memories (SRAM/SDRAM) - * This SRAM/SDRAM will be used as program data memory (including heap and stack). - * @param None - * @retval None - */ -void SystemInit_ExtMemCtl(void) -{ - __IO uint32_t tmp = 0x00; - - register uint32_t tmpreg = 0, timeout = 0xFFFF; - register __IO uint32_t index; - - /* Enable GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH and GPIOI interface clock */ - RCC->AHB1ENR |= 0x000001F8; - - /* Delay after an RCC peripheral clock enabling */ - tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN); - - /* Connect PDx pins to FMC Alternate function */ - GPIOD->AFR[0] = 0x00CCC0CC; - GPIOD->AFR[1] = 0xCCCCCCCC; - /* Configure PDx pins in Alternate function mode */ - GPIOD->MODER = 0xAAAA0A8A; - /* Configure PDx pins speed to 100 MHz */ - GPIOD->OSPEEDR = 0xFFFF0FCF; - /* Configure PDx pins Output type to push-pull */ - GPIOD->OTYPER = 0x00000000; - /* No pull-up, pull-down for PDx pins */ - GPIOD->PUPDR = 0x00000000; - - /* Connect PEx pins to FMC Alternate function */ - GPIOE->AFR[0] = 0xC00CC0CC; - GPIOE->AFR[1] = 0xCCCCCCCC; - /* Configure PEx pins in Alternate function mode */ - GPIOE->MODER = 0xAAAA828A; - /* Configure PEx pins speed to 100 MHz */ - GPIOE->OSPEEDR = 0xFFFFC3CF; - /* Configure PEx pins Output type to push-pull */ - GPIOE->OTYPER = 0x00000000; - /* No pull-up, pull-down for PEx pins */ - GPIOE->PUPDR = 0x00000000; - - /* Connect PFx pins to FMC Alternate function */ - GPIOF->AFR[0] = 0xCCCCCCCC; - GPIOF->AFR[1] = 0xCCCCCCCC; - /* Configure PFx pins in Alternate function mode */ - GPIOF->MODER = 0xAA800AAA; - /* Configure PFx pins speed to 50 MHz */ - GPIOF->OSPEEDR = 0xAA800AAA; - /* Configure PFx pins Output type to push-pull */ - GPIOF->OTYPER = 0x00000000; - /* No pull-up, pull-down for PFx pins */ - GPIOF->PUPDR = 0x00000000; - - /* Connect PGx pins to FMC Alternate function */ - GPIOG->AFR[0] = 0xCCCCCCCC; - GPIOG->AFR[1] = 0xCCCCCCCC; - /* Configure PGx pins in Alternate function mode */ - GPIOG->MODER = 0xAAAAAAAA; - /* Configure PGx pins speed to 50 MHz */ - GPIOG->OSPEEDR = 0xAAAAAAAA; - /* Configure PGx pins Output type to push-pull */ - GPIOG->OTYPER = 0x00000000; - /* No pull-up, pull-down for PGx pins */ - GPIOG->PUPDR = 0x00000000; - - /* Connect PHx pins to FMC Alternate function */ - GPIOH->AFR[0] = 0x00C0CC00; - GPIOH->AFR[1] = 0xCCCCCCCC; - /* Configure PHx pins in Alternate function mode */ - GPIOH->MODER = 0xAAAA08A0; - /* Configure PHx pins speed to 50 MHz */ - GPIOH->OSPEEDR = 0xAAAA08A0; - /* Configure PHx pins Output type to push-pull */ - GPIOH->OTYPER = 0x00000000; - /* No pull-up, pull-down for PHx pins */ - GPIOH->PUPDR = 0x00000000; - - /* Connect PIx pins to FMC Alternate function */ - GPIOI->AFR[0] = 0xCCCCCCCC; - GPIOI->AFR[1] = 0x00000CC0; - /* Configure PIx pins in Alternate function mode */ - GPIOI->MODER = 0x0028AAAA; - /* Configure PIx pins speed to 50 MHz */ - GPIOI->OSPEEDR = 0x0028AAAA; - /* Configure PIx pins Output type to push-pull */ - GPIOI->OTYPER = 0x00000000; - /* No pull-up, pull-down for PIx pins */ - GPIOI->PUPDR = 0x00000000; - -/*-- FMC Configuration -------------------------------------------------------*/ - /* Enable the FMC interface clock */ - RCC->AHB3ENR |= 0x00000001; - /* Delay after an RCC peripheral clock enabling */ - tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); - - FMC_Bank5_6->SDCR[0] = 0x000019E4; - FMC_Bank5_6->SDTR[0] = 0x01115351; - - /* SDRAM initialization sequence */ - /* Clock enable command */ - FMC_Bank5_6->SDCMR = 0x00000011; - tmpreg = FMC_Bank5_6->SDSR & 0x00000020; - while((tmpreg != 0) && (timeout-- > 0)) - { - tmpreg = FMC_Bank5_6->SDSR & 0x00000020; - } - - /* Delay */ - for (index = 0; index<1000; index++); - - /* PALL command */ - FMC_Bank5_6->SDCMR = 0x00000012; - timeout = 0xFFFF; - while((tmpreg != 0) && (timeout-- > 0)) - { - tmpreg = FMC_Bank5_6->SDSR & 0x00000020; - } - - /* Auto refresh command */ - FMC_Bank5_6->SDCMR = 0x00000073; - timeout = 0xFFFF; - while((tmpreg != 0) && (timeout-- > 0)) - { - tmpreg = FMC_Bank5_6->SDSR & 0x00000020; - } - - /* MRD register program */ - FMC_Bank5_6->SDCMR = 0x00046014; - timeout = 0xFFFF; - while((tmpreg != 0) && (timeout-- > 0)) - { - tmpreg = FMC_Bank5_6->SDSR & 0x00000020; - } - - /* Set refresh count */ - tmpreg = FMC_Bank5_6->SDRTR; - FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1)); - - /* Disable write protection */ - tmpreg = FMC_Bank5_6->SDCR[0]; - FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF); - -#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) - /* Configure and enable Bank1_SRAM2 */ - FMC_Bank1->BTCR[2] = 0x00001011; - FMC_Bank1->BTCR[3] = 0x00000201; - FMC_Bank1E->BWTR[2] = 0x0fffffff; -#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ -#if defined(STM32F469xx) || defined(STM32F479xx) - /* Configure and enable Bank1_SRAM2 */ - FMC_Bank1->BTCR[2] = 0x00001091; - FMC_Bank1->BTCR[3] = 0x00110212; - FMC_Bank1E->BWTR[2] = 0x0fffffff; -#endif /* STM32F469xx || STM32F479xx */ - - (void)(tmp); -} -#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ -#elif defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) -/** - * @brief Setup the external memory controller. - * Called in startup_stm32f4xx.s before jump to main. - * This function configures the external memories (SRAM/SDRAM) - * This SRAM/SDRAM will be used as program data memory (including heap and stack). - * @param None - * @retval None - */ -void SystemInit_ExtMemCtl(void) -{ - __IO uint32_t tmp = 0x00; -#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ - || defined(STM32F446xx) || defined(STM32F469xx) || defined(STM32F479xx) -#if defined (DATA_IN_ExtSDRAM) - register uint32_t tmpreg = 0, timeout = 0xFFFF; - register __IO uint32_t index; - -#if defined(STM32F446xx) - /* Enable GPIOA, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG interface - clock */ - RCC->AHB1ENR |= 0x0000007D; -#else - /* Enable GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH and GPIOI interface - clock */ - RCC->AHB1ENR |= 0x000001F8; -#endif /* STM32F446xx */ - /* Delay after an RCC peripheral clock enabling */ - tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIOCEN); - -#if defined(STM32F446xx) - /* Connect PAx pins to FMC Alternate function */ - GPIOA->AFR[0] |= 0xC0000000; - GPIOA->AFR[1] |= 0x00000000; - /* Configure PDx pins in Alternate function mode */ - GPIOA->MODER |= 0x00008000; - /* Configure PDx pins speed to 50 MHz */ - GPIOA->OSPEEDR |= 0x00008000; - /* Configure PDx pins Output type to push-pull */ - GPIOA->OTYPER |= 0x00000000; - /* No pull-up, pull-down for PDx pins */ - GPIOA->PUPDR |= 0x00000000; - - /* Connect PCx pins to FMC Alternate function */ - GPIOC->AFR[0] |= 0x00CC0000; - GPIOC->AFR[1] |= 0x00000000; - /* Configure PDx pins in Alternate function mode */ - GPIOC->MODER |= 0x00000A00; - /* Configure PDx pins speed to 50 MHz */ - GPIOC->OSPEEDR |= 0x00000A00; - /* Configure PDx pins Output type to push-pull */ - GPIOC->OTYPER |= 0x00000000; - /* No pull-up, pull-down for PDx pins */ - GPIOC->PUPDR |= 0x00000000; -#endif /* STM32F446xx */ - - /* Connect PDx pins to FMC Alternate function */ - GPIOD->AFR[0] = 0x000000CC; - GPIOD->AFR[1] = 0xCC000CCC; - /* Configure PDx pins in Alternate function mode */ - GPIOD->MODER = 0xA02A000A; - /* Configure PDx pins speed to 50 MHz */ - GPIOD->OSPEEDR = 0xA02A000A; - /* Configure PDx pins Output type to push-pull */ - GPIOD->OTYPER = 0x00000000; - /* No pull-up, pull-down for PDx pins */ - GPIOD->PUPDR = 0x00000000; - - /* Connect PEx pins to FMC Alternate function */ - GPIOE->AFR[0] = 0xC00000CC; - GPIOE->AFR[1] = 0xCCCCCCCC; - /* Configure PEx pins in Alternate function mode */ - GPIOE->MODER = 0xAAAA800A; - /* Configure PEx pins speed to 50 MHz */ - GPIOE->OSPEEDR = 0xAAAA800A; - /* Configure PEx pins Output type to push-pull */ - GPIOE->OTYPER = 0x00000000; - /* No pull-up, pull-down for PEx pins */ - GPIOE->PUPDR = 0x00000000; - - /* Connect PFx pins to FMC Alternate function */ - GPIOF->AFR[0] = 0xCCCCCCCC; - GPIOF->AFR[1] = 0xCCCCCCCC; - /* Configure PFx pins in Alternate function mode */ - GPIOF->MODER = 0xAA800AAA; - /* Configure PFx pins speed to 50 MHz */ - GPIOF->OSPEEDR = 0xAA800AAA; - /* Configure PFx pins Output type to push-pull */ - GPIOF->OTYPER = 0x00000000; - /* No pull-up, pull-down for PFx pins */ - GPIOF->PUPDR = 0x00000000; - - /* Connect PGx pins to FMC Alternate function */ - GPIOG->AFR[0] = 0xCCCCCCCC; - GPIOG->AFR[1] = 0xCCCCCCCC; - /* Configure PGx pins in Alternate function mode */ - GPIOG->MODER = 0xAAAAAAAA; - /* Configure PGx pins speed to 50 MHz */ - GPIOG->OSPEEDR = 0xAAAAAAAA; - /* Configure PGx pins Output type to push-pull */ - GPIOG->OTYPER = 0x00000000; - /* No pull-up, pull-down for PGx pins */ - GPIOG->PUPDR = 0x00000000; - -#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ - || defined(STM32F469xx) || defined(STM32F479xx) - /* Connect PHx pins to FMC Alternate function */ - GPIOH->AFR[0] = 0x00C0CC00; - GPIOH->AFR[1] = 0xCCCCCCCC; - /* Configure PHx pins in Alternate function mode */ - GPIOH->MODER = 0xAAAA08A0; - /* Configure PHx pins speed to 50 MHz */ - GPIOH->OSPEEDR = 0xAAAA08A0; - /* Configure PHx pins Output type to push-pull */ - GPIOH->OTYPER = 0x00000000; - /* No pull-up, pull-down for PHx pins */ - GPIOH->PUPDR = 0x00000000; - - /* Connect PIx pins to FMC Alternate function */ - GPIOI->AFR[0] = 0xCCCCCCCC; - GPIOI->AFR[1] = 0x00000CC0; - /* Configure PIx pins in Alternate function mode */ - GPIOI->MODER = 0x0028AAAA; - /* Configure PIx pins speed to 50 MHz */ - GPIOI->OSPEEDR = 0x0028AAAA; - /* Configure PIx pins Output type to push-pull */ - GPIOI->OTYPER = 0x00000000; - /* No pull-up, pull-down for PIx pins */ - GPIOI->PUPDR = 0x00000000; -#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */ - -/*-- FMC Configuration -------------------------------------------------------*/ - /* Enable the FMC interface clock */ - RCC->AHB3ENR |= 0x00000001; - /* Delay after an RCC peripheral clock enabling */ - tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); - - /* Configure and enable SDRAM bank1 */ -#if defined(STM32F446xx) - FMC_Bank5_6->SDCR[0] = 0x00001954; -#else - FMC_Bank5_6->SDCR[0] = 0x000019E4; -#endif /* STM32F446xx */ - FMC_Bank5_6->SDTR[0] = 0x01115351; - - /* SDRAM initialization sequence */ - /* Clock enable command */ - FMC_Bank5_6->SDCMR = 0x00000011; - tmpreg = FMC_Bank5_6->SDSR & 0x00000020; - while((tmpreg != 0) && (timeout-- > 0)) - { - tmpreg = FMC_Bank5_6->SDSR & 0x00000020; - } - - /* Delay */ - for (index = 0; index<1000; index++); - - /* PALL command */ - FMC_Bank5_6->SDCMR = 0x00000012; - timeout = 0xFFFF; - while((tmpreg != 0) && (timeout-- > 0)) - { - tmpreg = FMC_Bank5_6->SDSR & 0x00000020; - } - - /* Auto refresh command */ -#if defined(STM32F446xx) - FMC_Bank5_6->SDCMR = 0x000000F3; -#else - FMC_Bank5_6->SDCMR = 0x00000073; -#endif /* STM32F446xx */ - timeout = 0xFFFF; - while((tmpreg != 0) && (timeout-- > 0)) - { - tmpreg = FMC_Bank5_6->SDSR & 0x00000020; - } - - /* MRD register program */ -#if defined(STM32F446xx) - FMC_Bank5_6->SDCMR = 0x00044014; -#else - FMC_Bank5_6->SDCMR = 0x00046014; -#endif /* STM32F446xx */ - timeout = 0xFFFF; - while((tmpreg != 0) && (timeout-- > 0)) - { - tmpreg = FMC_Bank5_6->SDSR & 0x00000020; - } - - /* Set refresh count */ - tmpreg = FMC_Bank5_6->SDRTR; -#if defined(STM32F446xx) - FMC_Bank5_6->SDRTR = (tmpreg | (0x0000050C<<1)); -#else - FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1)); -#endif /* STM32F446xx */ - - /* Disable write protection */ - tmpreg = FMC_Bank5_6->SDCR[0]; - FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF); -#endif /* DATA_IN_ExtSDRAM */ -#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx || STM32F446xx || STM32F469xx || STM32F479xx */ - -#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx)\ - || defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx)\ - || defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) - -#if defined(DATA_IN_ExtSRAM) -/*-- GPIOs Configuration -----------------------------------------------------*/ - /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ - RCC->AHB1ENR |= 0x00000078; - /* Delay after an RCC peripheral clock enabling */ - tmp = READ_BIT(RCC->AHB1ENR, RCC_AHB1ENR_GPIODEN); - - /* Connect PDx pins to FMC Alternate function */ - GPIOD->AFR[0] = 0x00CCC0CC; - GPIOD->AFR[1] = 0xCCCCCCCC; - /* Configure PDx pins in Alternate function mode */ - GPIOD->MODER = 0xAAAA0A8A; - /* Configure PDx pins speed to 100 MHz */ - GPIOD->OSPEEDR = 0xFFFF0FCF; - /* Configure PDx pins Output type to push-pull */ - GPIOD->OTYPER = 0x00000000; - /* No pull-up, pull-down for PDx pins */ - GPIOD->PUPDR = 0x00000000; - - /* Connect PEx pins to FMC Alternate function */ - GPIOE->AFR[0] = 0xC00CC0CC; - GPIOE->AFR[1] = 0xCCCCCCCC; - /* Configure PEx pins in Alternate function mode */ - GPIOE->MODER = 0xAAAA828A; - /* Configure PEx pins speed to 100 MHz */ - GPIOE->OSPEEDR = 0xFFFFC3CF; - /* Configure PEx pins Output type to push-pull */ - GPIOE->OTYPER = 0x00000000; - /* No pull-up, pull-down for PEx pins */ - GPIOE->PUPDR = 0x00000000; - - /* Connect PFx pins to FMC Alternate function */ - GPIOF->AFR[0] = 0x00CCCCCC; - GPIOF->AFR[1] = 0xCCCC0000; - /* Configure PFx pins in Alternate function mode */ - GPIOF->MODER = 0xAA000AAA; - /* Configure PFx pins speed to 100 MHz */ - GPIOF->OSPEEDR = 0xFF000FFF; - /* Configure PFx pins Output type to push-pull */ - GPIOF->OTYPER = 0x00000000; - /* No pull-up, pull-down for PFx pins */ - GPIOF->PUPDR = 0x00000000; - - /* Connect PGx pins to FMC Alternate function */ - GPIOG->AFR[0] = 0x00CCCCCC; - GPIOG->AFR[1] = 0x000000C0; - /* Configure PGx pins in Alternate function mode */ - GPIOG->MODER = 0x00085AAA; - /* Configure PGx pins speed to 100 MHz */ - GPIOG->OSPEEDR = 0x000CAFFF; - /* Configure PGx pins Output type to push-pull */ - GPIOG->OTYPER = 0x00000000; - /* No pull-up, pull-down for PGx pins */ - GPIOG->PUPDR = 0x00000000; - -/*-- FMC/FSMC Configuration --------------------------------------------------*/ - /* Enable the FMC/FSMC interface clock */ - RCC->AHB3ENR |= 0x00000001; - -#if defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) - /* Delay after an RCC peripheral clock enabling */ - tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); - /* Configure and enable Bank1_SRAM2 */ - FMC_Bank1->BTCR[2] = 0x00001011; - FMC_Bank1->BTCR[3] = 0x00000201; - FMC_Bank1E->BWTR[2] = 0x0fffffff; -#endif /* STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx */ -#if defined(STM32F469xx) || defined(STM32F479xx) - /* Delay after an RCC peripheral clock enabling */ - tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FMCEN); - /* Configure and enable Bank1_SRAM2 */ - FMC_Bank1->BTCR[2] = 0x00001091; - FMC_Bank1->BTCR[3] = 0x00110212; - FMC_Bank1E->BWTR[2] = 0x0fffffff; -#endif /* STM32F469xx || STM32F479xx */ -#if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx)|| defined(STM32F417xx)\ - || defined(STM32F412Zx) || defined(STM32F412Vx) - /* Delay after an RCC peripheral clock enabling */ - tmp = READ_BIT(RCC->AHB3ENR, RCC_AHB3ENR_FSMCEN); - /* Configure and enable Bank1_SRAM2 */ - FSMC_Bank1->BTCR[2] = 0x00001011; - FSMC_Bank1->BTCR[3] = 0x00000201; - FSMC_Bank1E->BWTR[2] = 0x0FFFFFFF; -#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F412Zx || STM32F412Vx */ - -#endif /* DATA_IN_ExtSRAM */ -#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx ||\ - STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx */ - (void)(tmp); -} -#endif /* DATA_IN_ExtSRAM && DATA_IN_ExtSDRAM */ -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/Src/trx_manager.c b/Src/trx_manager.c deleted file mode 100644 index 2ea1457..0000000 --- a/Src/trx_manager.c +++ /dev/null @@ -1,537 +0,0 @@ -#include "stm32f4xx_hal.h" -#include "main.h" -#include "trx_manager.h" -#include "functions.h" -#include "lcd.h" -#include "fpga.h" -#include "settings.h" -#include "wm8731.h" -#include "fpga.h" -#include "bands.h" -#include "agc.h" -#include "audio_filters.h" -#include "usbd_audio_if.h" -#include "front_unit.h" -#include "rf_unit.h" -#include "system_menu.h" - -volatile bool TRX_ptt_hard = false; -volatile bool TRX_ptt_soft = false; -volatile bool TRX_old_ptt_soft = false; -volatile bool TRX_key_serial = false; -volatile bool TRX_old_key_serial = false; -volatile bool TRX_key_dot_hard = false; -volatile bool TRX_key_dash_hard = false; -volatile uint_fast16_t TRX_Key_Timeout_est = 0; -volatile bool TRX_RX_IQ_swap = false; -volatile bool TRX_TX_IQ_swap = false; -volatile bool TRX_Tune = false; -volatile bool TRX_Inited = false; -volatile int_fast16_t TRX_RX_dBm = -100; -volatile bool TRX_ADC_OTR = false; -volatile bool TRX_DAC_OTR = false; -volatile int16_t TRX_ADC_MINAMPLITUDE = 0; -volatile int16_t TRX_ADC_MAXAMPLITUDE = 0; -volatile uint32_t TRX_SNTP_Synced = 0; // time of the last time synchronization -volatile int_fast16_t TRX_SHIFT = 0; -volatile float32_t TRX_MAX_TX_Amplitude = MAX_TX_AMPLITUDE; -volatile float32_t TRX_PWR_Forward = 0; -volatile float32_t TRX_PWR_Backward = 0; -volatile float32_t TRX_SWR = 0; -volatile float32_t TRX_ALC = 0; -static uint_fast8_t autogain_wait_reaction = 0; // timer for waiting for a reaction from changing the ATT / PRE modes -volatile uint8_t TRX_AutoGain_Stage = 0; // stage of working out the amplification corrector -static uint32_t KEYER_symbol_start_time = 0; // start time of the automatic key character -static uint_fast8_t KEYER_symbol_status = 0; // status (signal or period) of the automatic key symbol -volatile float32_t TRX_IQ_phase_error = 0.0f; -volatile bool TRX_NeedGoToBootloader = false; -volatile bool TRX_Temporary_Stop_BandMap = false; -volatile bool TRX_Mute = false; -volatile uint32_t TRX_Temporary_Mute_StartTime = 0; -uint32_t TRX_freq_phrase = 0; -uint32_t TRX_freq_phrase_tx = 0; -float32_t TRX_InVoltage = 12.0f; - -static uint_fast8_t TRX_TXRXMode = 0; //0 - undef, 1 - rx, 2 - tx, 3 - txrx -static void TRX_Start_RX(void); -static void TRX_Start_TX(void); -static void TRX_Start_TXRX(void); - -bool TRX_on_TX(void) -{ - if (TRX_ptt_hard || TRX_ptt_soft || TRX_Tune || CurrentVFO()->Mode == TRX_MODE_LOOPBACK || TRX_Key_Timeout_est > 0) - return true; - return false; -} - -void TRX_Init() -{ - TRX_Start_RX(); - uint_fast8_t saved_mode = CurrentVFO()->Mode; - TRX_setFrequency(CurrentVFO()->Freq, CurrentVFO()); - TRX_setMode(saved_mode, CurrentVFO()); - HAL_ADCEx_InjectedStart(&hadc1); - HAL_ADCEx_InjectedStart(&hadc2); -} - -void TRX_Restart_Mode() -{ - uint_fast8_t mode = CurrentVFO()->Mode; - //CLAR - if (TRX.CLAR) - { - TRX.current_vfo = !TRX.current_vfo; - TRX_setFrequency(CurrentVFO()->Freq, CurrentVFO()); - TRX_setMode(CurrentVFO()->Mode, CurrentVFO()); - LCD_UpdateQuery.FreqInfo = true; - LCD_UpdateQuery.TopButtons = true; - LCD_UpdateQuery.StatusInfoGUIRedraw = true; - } - // - if (TRX_on_TX()) - { - if (mode == TRX_MODE_LOOPBACK || mode == TRX_MODE_CW_L || mode == TRX_MODE_CW_U) - TRX_Start_TXRX(); - else - TRX_Start_TX(); - } - else - { - TRX_Start_RX(); - } - FFT_Reset(); -} - -static void TRX_Start_RX() -{ - if (TRX_TXRXMode == 1) - return; - //sendToDebug_str("RX MODE\r\n"); - WM8731_CleanBuffer(); - Processor_NeedRXBuffer = false; - WM8731_Buffer_underrun = false; - WM8731_DMA_state = true; - WM8731_RX_mode(); - WM8731_start_i2s_and_dma(); - TRX_TXRXMode = 1; - //clean TX buffer - memset((void *)&FPGA_Audio_SendBuffer_Q[0], 0x00, sizeof(FPGA_Audio_SendBuffer_Q)); - memset((void *)&FPGA_Audio_SendBuffer_I[0], 0x00, sizeof(FPGA_Audio_SendBuffer_I)); -} - -static void TRX_Start_TX() -{ - if (TRX_TXRXMode == 2) - return; - //sendToDebug_str("TX MODE\r\n"); - WM8731_CleanBuffer(); - HAL_Delay(10); // delay before the RF signal is applied, so that the relay has time to trigger - WM8731_TX_mode(); - WM8731_start_i2s_and_dma(); - TRX_TXRXMode = 2; -} - -static void TRX_Start_TXRX() -{ - if (TRX_TXRXMode == 3) - return; - //sendToDebug_str("TXRX MODE\r\n"); - WM8731_CleanBuffer(); - WM8731_TXRX_mode(); - WM8731_start_i2s_and_dma(); - TRX_TXRXMode = 3; -} - -void TRX_ptt_change(void) -{ - if (TRX_Tune) - return; - bool TRX_new_ptt_hard = !HAL_GPIO_ReadPin(PTT_IN_GPIO_Port, PTT_IN_Pin); - if (TRX_ptt_hard != TRX_new_ptt_hard) - { - TRX_ptt_hard = TRX_new_ptt_hard; - TRX_ptt_soft = false; - LCD_UpdateQuery.StatusInfoGUIRedraw = true; - FPGA_NeedSendParams = true; - TRX_Restart_Mode(); - } - if (TRX_ptt_soft != TRX_old_ptt_soft) - { - TRX_old_ptt_soft = TRX_ptt_soft; - LCD_UpdateQuery.StatusInfoGUIRedraw = true; - FPGA_NeedSendParams = true; - TRX_Restart_Mode(); - } -} - -void TRX_key_change(void) -{ - if (TRX_Tune) - return; - if (CurrentVFO()->Mode != TRX_MODE_CW_L && CurrentVFO()->Mode != TRX_MODE_CW_U) - return; - bool TRX_new_key_dot_hard = !HAL_GPIO_ReadPin(KEY_IN_DOT_GPIO_Port, KEY_IN_DOT_Pin); - if (TRX_key_dot_hard != TRX_new_key_dot_hard) - { - TRX_key_dot_hard = TRX_new_key_dot_hard; - if (TRX_key_dot_hard == true && (KEYER_symbol_status == 0 || !TRX.CW_KEYER)) - { - TRX_Key_Timeout_est = TRX.CW_Key_timeout; - LCD_UpdateQuery.StatusInfoGUIRedraw = true; - FPGA_NeedSendParams = true; - TRX_Restart_Mode(); - } - } - bool TRX_new_key_dash_hard = !HAL_GPIO_ReadPin(KEY_IN_DASH_GPIO_Port, KEY_IN_DASH_Pin); - if (TRX_key_dash_hard != TRX_new_key_dash_hard) - { - TRX_key_dash_hard = TRX_new_key_dash_hard; - if (TRX_key_dash_hard == true && (KEYER_symbol_status == 0 || !TRX.CW_KEYER)) - { - TRX_Key_Timeout_est = TRX.CW_Key_timeout; - LCD_UpdateQuery.StatusInfoGUIRedraw = true; - FPGA_NeedSendParams = true; - TRX_Restart_Mode(); - } - } - if (TRX_key_serial != TRX_old_key_serial) - { - TRX_old_key_serial = TRX_key_serial; - if (TRX_key_serial == true) - TRX_Key_Timeout_est = TRX.CW_Key_timeout; - LCD_UpdateQuery.StatusInfoGUIRedraw = true; - FPGA_NeedSendParams = true; - TRX_Restart_Mode(); - } -} - -void TRX_setFrequency(uint32_t _freq, VFO *vfo) -{ - if (_freq < 1) - return; - if (_freq >= MAX_RX_FREQ_HZ) - _freq = MAX_RX_FREQ_HZ; - - vfo->Freq = _freq; - - //get band - int_fast8_t bandFromFreq = getBandFromFreq(_freq, false); - if (bandFromFreq >= 0) - { - TRX.BANDS_SAVED_SETTINGS[bandFromFreq].Freq = _freq; - } - if (TRX.BandMapEnabled && !TRX_Temporary_Stop_BandMap) - { - uint_fast8_t mode_from_bandmap = getModeFromFreq(vfo->Freq); - if (vfo->Mode != mode_from_bandmap) - { - TRX_setMode(mode_from_bandmap, vfo); - TRX.BANDS_SAVED_SETTINGS[bandFromFreq].Mode = mode_from_bandmap; - LCD_UpdateQuery.TopButtons = true; - } - } - - //get fpga freq phrase - VFO *current_vfo = CurrentVFO(); - VFO *secondary_vfo = SecondaryVFO(); - TRX_freq_phrase = getRXPhraseFromFrequency((int32_t)current_vfo->Freq + TRX_SHIFT); - TRX_freq_phrase_tx = getTXPhraseFromFrequency((int32_t)current_vfo->Freq + TRX_SHIFT); - if (!TRX_on_TX()) - { - switch (current_vfo->Mode) - { - case TRX_MODE_CW_L: - TRX_freq_phrase_tx = getTXPhraseFromFrequency((int32_t)current_vfo->Freq - TRX.CW_GENERATOR_SHIFT_HZ); - break; - case TRX_MODE_CW_U: - TRX_freq_phrase_tx = getTXPhraseFromFrequency((int32_t)current_vfo->Freq + TRX.CW_GENERATOR_SHIFT_HZ); - break; - default: - TRX_freq_phrase_tx = getTXPhraseFromFrequency((int32_t)current_vfo->Freq); - break; - } - } - - // - TRX_MAX_TX_Amplitude = getMaxTXAmplitudeOnFreq(vfo->Freq); - FPGA_NeedSendParams = true; -} - -void TRX_setMode(uint_fast8_t _mode, VFO *vfo) -{ - if (vfo->Mode == TRX_MODE_LOOPBACK || _mode == TRX_MODE_LOOPBACK) - LCD_UpdateQuery.StatusInfoGUI = true; - vfo->Mode = _mode; - if (vfo->Mode == TRX_MODE_LOOPBACK) - TRX_Start_TXRX(); - - switch (_mode) - { - case TRX_MODE_AM: - vfo->LPF_Filter_Width = TRX.AM_LPF_Filter; - vfo->HPF_Filter_Width = 0; - break; - case TRX_MODE_LSB: - case TRX_MODE_USB: - case TRX_MODE_DIGI_L: - case TRX_MODE_DIGI_U: - vfo->LPF_Filter_Width = TRX.SSB_LPF_Filter; - vfo->HPF_Filter_Width = TRX.SSB_HPF_Filter; - break; - case TRX_MODE_CW_L: - case TRX_MODE_CW_U: - vfo->LPF_Filter_Width = TRX.CW_LPF_Filter; - vfo->HPF_Filter_Width = TRX.CW_HPF_Filter; - LCD_UpdateQuery.StatusInfoGUI = true; - break; - case TRX_MODE_NFM: - vfo->LPF_Filter_Width = TRX.FM_LPF_Filter; - vfo->HPF_Filter_Width = 0; - break; - case TRX_MODE_WFM: - vfo->LPF_Filter_Width = 0; - vfo->HPF_Filter_Width = 0; - break; - } - NeedReinitAudioFilters = true; - NeedSaveSettings = true; - LCD_UpdateQuery.StatusInfoBar = true; - LCD_UpdateQuery.StatusInfoGUI = true; -} - -void TRX_DoAutoGain(void) -{ - #define SKIP_CYCLES_DOWNSTAGE 10 //skip cycles on stage downgrade - static uint8_t skip_cycles = 0; - - //Process AutoGain feature - if (TRX.AutoGain && !TRX_on_TX()) - { - int32_t max_amplitude = abs(TRX_ADC_MAXAMPLITUDE); - if(abs(TRX_ADC_MINAMPLITUDE) > max_amplitude) - max_amplitude = abs(TRX_ADC_MINAMPLITUDE); - - switch (TRX_AutoGain_Stage) - { - case 0: // stage 1 - ATT - TRX.ADC_Driver = false; - TRX.ATT = true; - FPGA_NeedSendParams = true; - LCD_UpdateQuery.TopButtons = true; - autogain_wait_reaction = 0; - if(skip_cycles == 0) - { - sendToDebug_strln("AUTOGAIN BPF + ATT"); - TRX_AutoGain_Stage++; - } - else - skip_cycles--; - break; - case 1: // changed the state, process the results - if ((max_amplitude * db2rateV(TRX.ATT_DB)) <= AUTOGAIN_TARGET_AMPLITUDE) // if we can turn off ATT - go to the next stage (+ 12dB) - autogain_wait_reaction++; - else - autogain_wait_reaction = 0; - if (autogain_wait_reaction >= AUTOGAIN_CORRECTOR_WAITSTEP) - { - TRX_AutoGain_Stage++; - autogain_wait_reaction = 0; - } - break; - case 2: // stage 2 - NONE - TRX.ATT = false; - TRX.ADC_Driver = false; - FPGA_NeedSendParams = true; - LCD_UpdateQuery.TopButtons = true; - autogain_wait_reaction = 0; - if(skip_cycles == 0) - { - sendToDebug_strln("AUTOGAIN BPF"); - TRX_AutoGain_Stage++; - } - else - skip_cycles--; - break; - case 3: // changed the state, process the results - if (max_amplitude > AUTOGAIN_MAX_AMPLITUDE || TRX_ADC_OTR) - { - TRX_AutoGain_Stage -= 3; // too much gain, go back one step - skip_cycles = SKIP_CYCLES_DOWNSTAGE; - } - if ((max_amplitude * db2rateV(ADC_DRIVER_GAIN_DB) * db2rateV(-TRX.ATT_DB)) <= AUTOGAIN_TARGET_AMPLITUDE) // if we can turn off ATT - go to the next stage (+ 12dB) - autogain_wait_reaction++; - else - { - autogain_wait_reaction = 0; - } - if (autogain_wait_reaction >= AUTOGAIN_CORRECTOR_WAITSTEP) - { - TRX_AutoGain_Stage++; - autogain_wait_reaction = 0; - } - break; - case 5: // stage 4 - BPF + DRIVER + ATT - TRX.ATT = false; - TRX.ADC_Driver = true; - FPGA_NeedSendParams = true; - LCD_UpdateQuery.TopButtons = true; - autogain_wait_reaction = 0; - if(skip_cycles == 0) - { - sendToDebug_strln("AUTOGAIN BPF + DRIVER + ATT"); - TRX_AutoGain_Stage++; - } - else - skip_cycles--; - break; - case 6: // changed the state, process the results - if (max_amplitude > AUTOGAIN_MAX_AMPLITUDE || TRX_ADC_OTR) - { - TRX_AutoGain_Stage -= 3; // too much gain, go back one step - skip_cycles = SKIP_CYCLES_DOWNSTAGE; - } - if ((max_amplitude * db2rateV(TRX.ATT_DB)) <= AUTOGAIN_TARGET_AMPLITUDE) // if we can turn off ATT - go to the next stage (+ 12dB) - autogain_wait_reaction++; - else - autogain_wait_reaction = 0; - if (autogain_wait_reaction >= AUTOGAIN_CORRECTOR_WAITSTEP) - { - TRX_AutoGain_Stage++; - autogain_wait_reaction = 0; - } - break; - case 7: // stage 5 - BPF + DRIVER - TRX.ATT = false; - TRX.ADC_Driver = true; - FPGA_NeedSendParams = true; - LCD_UpdateQuery.TopButtons = true; - autogain_wait_reaction = 0; - if(skip_cycles == 0) - { - sendToDebug_strln("AUTOGAIN BPF + DRIVER"); - TRX_AutoGain_Stage++; - } - else - skip_cycles--; - break; - case 9: // changed the state, process the results - if (max_amplitude > AUTOGAIN_MAX_AMPLITUDE || TRX_ADC_OTR) - { - TRX_AutoGain_Stage -= 3; // too much gain, go back one step - skip_cycles = SKIP_CYCLES_DOWNSTAGE; - } - break; - - default: - TRX_AutoGain_Stage = 0; - break; - } - - int8_t band = getBandFromFreq(CurrentVFO()->Freq, true); - if (band > 0) - { - TRX.BANDS_SAVED_SETTINGS[band].ATT = TRX.ATT; - TRX.BANDS_SAVED_SETTINGS[band].ADC_Driver = TRX.ADC_Driver; - TRX.BANDS_SAVED_SETTINGS[band].AutoGain_Stage = TRX_AutoGain_Stage; - } - } -} - -void TRX_DBMCalculate(void) -{ - if(Processor_RX_Power_value == 0) - return; - - float32_t adc_volts = Processor_RX_Power_value * (ADC_RANGE / 2.0f); - if(adc_volts > 0.0f) - { - TRX_RX_dBm = (int16_t)(10.0f * log10f_fast((adc_volts * adc_volts / ADC_INPUT_IMPEDANCE) / 0.001f)); - TRX_RX_dBm += CALIBRATE.smeter_calibration; - } - Processor_RX_Power_value = 0; -} - -float32_t current_cw_power = 0.0f; -static float32_t TRX_generateRiseSignal(float32_t power) -{ - if(current_cw_power < power) - current_cw_power += power * 0.01f; - if(current_cw_power > power) - current_cw_power = power; - return current_cw_power; -} -static float32_t TRX_generateFallSignal(float32_t power) -{ - if(current_cw_power > 0.0f) - current_cw_power -= power * 0.01f; - if(current_cw_power < 0.0f) - current_cw_power = 0.0f; - return current_cw_power; -} - -float32_t TRX_GenerateCWSignal(float32_t power) -{ - if (!TRX.CW_KEYER) - { - if (!TRX_key_serial && !TRX_ptt_hard && !TRX_key_dot_hard && !TRX_key_dash_hard) - return TRX_generateFallSignal(power); - return TRX_generateRiseSignal(power); - } - - uint32_t dot_length_ms = 1200 / TRX.CW_KEYER_WPM; - uint32_t dash_length_ms = dot_length_ms * 3; - uint32_t sim_space_length_ms = dot_length_ms; - uint32_t curTime = HAL_GetTick(); - //dot - if (KEYER_symbol_status == 0 && TRX_key_dot_hard) - { - KEYER_symbol_start_time = curTime; - KEYER_symbol_status = 1; - } - if (KEYER_symbol_status == 1 && (KEYER_symbol_start_time + dot_length_ms) > curTime) - { - TRX_Key_Timeout_est = TRX.CW_Key_timeout; - return TRX_generateRiseSignal(power); - } - if (KEYER_symbol_status == 1 && (KEYER_symbol_start_time + dot_length_ms) < curTime) - { - KEYER_symbol_start_time = curTime; - KEYER_symbol_status = 3; - } - - //dash - if (KEYER_symbol_status == 0 && TRX_key_dash_hard) - { - KEYER_symbol_start_time = curTime; - KEYER_symbol_status = 2; - } - if (KEYER_symbol_status == 2 && (KEYER_symbol_start_time + dash_length_ms) > curTime) - { - TRX_Key_Timeout_est = TRX.CW_Key_timeout; - return TRX_generateRiseSignal(power); - } - if (KEYER_symbol_status == 2 && (KEYER_symbol_start_time + dash_length_ms) < curTime) - { - KEYER_symbol_start_time = curTime; - KEYER_symbol_status = 3; - } - - //space - if (KEYER_symbol_status == 3 && (KEYER_symbol_start_time + sim_space_length_ms) > curTime) - { - TRX_Key_Timeout_est = TRX.CW_Key_timeout; - return TRX_generateFallSignal(power); - } - if (KEYER_symbol_status == 3 && (KEYER_symbol_start_time + sim_space_length_ms) < curTime) - { - KEYER_symbol_status = 0; - } - - return TRX_generateFallSignal(power); -} - -void TRX_TemporaryMute(void) -{ - WM8731_Mute(); - TRX_Temporary_Mute_StartTime = HAL_GetTick(); -} diff --git a/Src/trx_manager.h b/Src/trx_manager.h deleted file mode 100644 index b04e872..0000000 --- a/Src/trx_manager.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef TRX_MANAGER_H -#define TRX_MANAGER_H - -#include "stm32f4xx_hal.h" -#include -#include "settings.h" - -extern void TRX_Init(void); -extern void TRX_setFrequency(uint32_t _freq, VFO *vfo); -extern void TRX_setMode(uint_fast8_t _mode, VFO *vfo); -extern void TRX_ptt_change(void); -extern void TRX_key_change(void); -extern bool TRX_on_TX(void); -extern void TRX_DoAutoGain(void); -extern void TRX_Restart_Mode(void); -extern void TRX_DBMCalculate(void); -extern float32_t TRX_GenerateCWSignal(float32_t power); -extern void TRX_TemporaryMute(void); - -volatile extern bool TRX_ptt_hard; -volatile extern bool TRX_ptt_soft; -volatile extern bool TRX_old_ptt_soft; -volatile extern bool TRX_key_serial; -volatile extern bool TRX_old_key_serial; -volatile extern bool TRX_key_dot_hard; -volatile extern bool TRX_key_dash_hard; -volatile extern uint_fast16_t TRX_Key_Timeout_est; -volatile extern bool TRX_RX_IQ_swap; -volatile extern bool TRX_TX_IQ_swap; -volatile extern bool TRX_Tune; -volatile extern bool TRX_Inited; -volatile extern int_fast16_t TRX_RX_dBm; -volatile extern bool TRX_ADC_OTR; -volatile extern bool TRX_DAC_OTR; -volatile extern int16_t TRX_ADC_MINAMPLITUDE; -volatile extern int16_t TRX_ADC_MAXAMPLITUDE; -volatile extern int_fast16_t TRX_SHIFT; -volatile extern float32_t TRX_MAX_TX_Amplitude; -volatile extern float32_t TRX_PWR_Forward; -volatile extern float32_t TRX_PWR_Backward; -volatile extern float32_t TRX_SWR; -volatile extern float32_t TRX_ALC; -volatile extern bool TRX_Mute; -volatile extern float32_t TRX_IQ_phase_error; -volatile extern bool TRX_NeedGoToBootloader; -volatile extern bool TRX_Temporary_Stop_BandMap; -volatile extern uint8_t TRX_AutoGain_Stage; -extern const char *MODE_DESCR[]; -extern uint32_t TRX_freq_phrase; -extern uint32_t TRX_freq_phrase_tx; -volatile extern uint32_t TRX_Temporary_Mute_StartTime; -extern float32_t TRX_InVoltage; - -#endif diff --git a/Src/usbd_audio_if.c b/Src/usbd_audio_if.c deleted file mode 100644 index 697b5a6..0000000 --- a/Src/usbd_audio_if.c +++ /dev/null @@ -1,64 +0,0 @@ -#include "usbd_audio_if.h" -#include "functions.h" -#include "wm8731.h" -#include "trx_manager.h" - -extern USBD_HandleTypeDef hUsbDeviceFS; - -static int8_t AUDIO_Init_FS(void); -static int8_t AUDIO_DeInit_FS(void); - -IRAM1 uint8_t USB_AUDIO_rx_buffer_a[USB_AUDIO_RX_BUFFER_SIZE] = {0}; -IRAM1 uint8_t USB_AUDIO_rx_buffer_b[USB_AUDIO_RX_BUFFER_SIZE] = {0}; -IRAM1 uint8_t USB_AUDIO_tx_buffer[USB_AUDIO_TX_BUFFER_SIZE] = {0}; - -volatile bool USB_AUDIO_current_rx_buffer = false; // a-false b-true -volatile bool USB_AUDIO_need_rx_buffer = false; // a-false b-true -static bool USB_AUDIO_Inited = false; - -USBD_AUDIO_ItfTypeDef USBD_AUDIO_fops_FS = - { - AUDIO_Init_FS, - AUDIO_DeInit_FS, -}; - -/* Private functions ---------------------------------------------------------*/ -/** - * @brief Initializes the AUDIO media low layer over USB FS IP - * @param AudioFreq: Audio frequency used to play the audio stream. - * @param Volume: Initial volume level (from 0 (Mute) to 100 (Max)) - * @param options: Reserved for future use - * @retval USBD_OK if all operations are OK else USBD_FAIL - */ - -static int8_t AUDIO_Init_FS(void) -{ - USBD_AUDIO_HandleTypeDef *haudio = (USBD_AUDIO_HandleTypeDef *)hUsbDeviceFS.pClassDataAUDIO; - haudio->RxBuffer = (uint8_t *)&USB_AUDIO_rx_buffer_a; - haudio->TxBuffer = (uint8_t *)&USB_AUDIO_tx_buffer; - haudio->TxBufferIndex = 0; - USBD_AUDIO_StartTransmit(&hUsbDeviceFS); - USBD_AUDIO_StartReceive(&hUsbDeviceFS); - USB_AUDIO_Inited = true; - return (USBD_OK); -} - -uint32_t USB_AUDIO_GetTXBufferIndex_FS(void) -{ - if (!USB_AUDIO_Inited) - return 0; - USBD_AUDIO_HandleTypeDef *haudio = (USBD_AUDIO_HandleTypeDef *)hUsbDeviceFS.pClassDataAUDIO; - return haudio->TxBufferIndex; -} - -/** - * @brief De-Initializes the AUDIO media low layer - * @param options: Reserved for future use - * @retval USBD_OK if all operations are OK else USBD_FAIL - */ -static int8_t AUDIO_DeInit_FS(void) -{ - /* USER CODE BEGIN 1 */ - return (USBD_OK); - /* USER CODE END 1 */ -} diff --git a/Src/usbd_audio_if.h b/Src/usbd_audio_if.h deleted file mode 100644 index fb5ea51..0000000 --- a/Src/usbd_audio_if.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef __USBD_AUDIO_IF_H__ -#define __USBD_AUDIO_IF_H__ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "usbd_ua3reo.h" -#include "functions.h" - - extern USBD_AUDIO_ItfTypeDef USBD_AUDIO_fops_FS; - - extern uint8_t USB_AUDIO_rx_buffer_a[USB_AUDIO_RX_BUFFER_SIZE]; - extern uint8_t USB_AUDIO_rx_buffer_b[USB_AUDIO_RX_BUFFER_SIZE]; - extern uint8_t USB_AUDIO_tx_buffer[USB_AUDIO_TX_BUFFER_SIZE]; - extern volatile bool USB_AUDIO_current_rx_buffer; // a-false b-true - extern volatile bool USB_AUDIO_need_rx_buffer; // a-false b-true - extern uint32_t USB_AUDIO_GetTXBufferIndex_FS(void); - - void TransferComplete_CallBack_FS(void); - void HalfTransfer_CallBack_FS(void); -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Src/usbd_cat_if.c b/Src/usbd_cat_if.c deleted file mode 100644 index b067d18..0000000 --- a/Src/usbd_cat_if.c +++ /dev/null @@ -1,773 +0,0 @@ -#include "usbd_cat_if.h" -#include "functions.h" -#include "settings.h" -#include "trx_manager.h" -#include -#include "lcd.h" -#include "fpga.h" -#include "audio_filters.h" - -#define CAT_APP_RX_DATA_SIZE 32 -#define CAT_APP_TX_DATA_SIZE 32 - -#define CAT_BUFFER_SIZE 64 -static char cat_buffer[CAT_BUFFER_SIZE] = {0}; -static uint8_t cat_buffer_head = 0; -static char command_to_parse[CAT_BUFFER_SIZE] = {0}; -static uint8_t CAT_UserRxBufferFS[CAT_APP_RX_DATA_SIZE]; -static uint8_t CAT_UserTxBufferFS[CAT_APP_TX_DATA_SIZE]; -static uint8_t lineCoding[7] = {0x00, 0xC2, 0x01, 0x00, 0x00, 0x00, 0x08}; // 115200bps, 1stop, no parity, 8bit - -extern USBD_HandleTypeDef hUsbDeviceFS; - -static uint8_t getFT450Mode(uint8_t VFO_Mode); -static uint8_t setFT450Mode(char *FT450_Mode); -static int8_t CAT_Init_FS(void); -static int8_t CAT_DeInit_FS(void); -static int8_t CAT_Control_FS(uint8_t cmd, uint8_t *pbuf); -static int8_t CAT_Receive_FS(uint8_t *pbuf, uint32_t *Len); -static void CAT_Transmit(char *data); -static uint8_t CAT_Transmit_FS(uint8_t *Buf, uint16_t Len); - -USBD_CAT_ItfTypeDef USBD_CAT_fops_FS = - { - CAT_Init_FS, - CAT_DeInit_FS, - CAT_Control_FS, - CAT_Receive_FS}; - -static int8_t CAT_Init_FS(void) -{ - /* USER CODE BEGIN 3 */ - /* Set Application Buffers */ - USBD_CAT_SetTxBuffer(&hUsbDeviceFS, CAT_UserTxBufferFS, 0); - USBD_CAT_SetRxBuffer(&hUsbDeviceFS, CAT_UserRxBufferFS); - return (USBD_OK); - /* USER CODE END 3 */ -} - -/** - * @brief DeInitializes the CDC media low layer - * @retval USBD_OK if all operations are OK else USBD_FAIL - */ -static int8_t CAT_DeInit_FS(void) -{ - /* USER CODE BEGIN 4 */ - return (USBD_OK); - /* USER CODE END 4 */ -} - -/** - * @brief Manage the CDC class requests - * @param cmd: Command code - * @param pbuf: Buffer containing command data (request parameters) - * @param length: Number of data to be sent (in bytes) - * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL - */ -static int8_t CAT_Control_FS(uint8_t cmd, uint8_t *pbuf) -{ - /* USER CODE BEGIN 5 */ - switch (cmd) - { - case CDC_SEND_ENCAPSULATED_COMMAND: - - break; - - case CDC_GET_ENCAPSULATED_RESPONSE: - - break; - - case CDC_SET_COMM_FEATURE: - - break; - - case CDC_GET_COMM_FEATURE: - - break; - - case CDC_CLEAR_COMM_FEATURE: - - break; - - /*******************************************************************************/ - /* Line Coding Structure */ - /*-----------------------------------------------------------------------------*/ - /* Offset | Field | Size | Value | Description */ - /* 0 | dwDTERate | 4 | Number |Data terminal rate, in bits per second*/ - /* 4 | bCharFormat | 1 | Number | Stop bits */ - /* 0 - 1 Stop bit */ - /* 1 - 1.5 Stop bits */ - /* 2 - 2 Stop bits */ - /* 5 | bParityType | 1 | Number | Parity */ - /* 0 - None */ - /* 1 - Odd */ - /* 2 - Even */ - /* 3 - Mark */ - /* 4 - Space */ - /* 6 | bDataBits | 1 | Number Data bits (5, 6, 7, 8 or 16). */ - /*******************************************************************************/ - case CDC_SET_LINE_CODING: - memcpy(lineCoding, pbuf, sizeof(lineCoding)); - break; - - case CDC_GET_LINE_CODING: - memcpy(pbuf, lineCoding, sizeof(lineCoding)); - break; - - case CDC_SET_CONTROL_LINE_STATE: - - break; - - case CDC_SEND_BREAK: - - break; - - default: - break; - } - - return (USBD_OK); - /* USER CODE END 5 */ -} - -/** - * @brief Data received over USB OUT endpoint are sent over CDC interface - * through this function. - * - * @note - * This function will block any OUT packet reception on USB endpoint - * untill exiting this function. If you exit this function before transfer - * is complete on CDC interface (ie. using DMA controller) it will result - * in receiving more data while previous ones are still not sent. - * - * @param Buf: Buffer of data to be received - * @param Len: Number of data received (in bytes) - * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL - */ -static int8_t CAT_Receive_FS(uint8_t *Buf, uint32_t *Len) -{ - char charBuff[CAT_BUFFER_SIZE] = {0}; - strncpy(charBuff, (char *)Buf, Len[0]); - if (Len[0] <= CAT_BUFFER_SIZE) - { - for (uint16_t i = 0; i < Len[0]; i++) - { - if (charBuff[i] != 0) - { - cat_buffer[cat_buffer_head] = charBuff[i]; - if (cat_buffer[cat_buffer_head] == ';') - { - memset(&command_to_parse, 0, CAT_BUFFER_SIZE); - memcpy(command_to_parse, cat_buffer, cat_buffer_head); - cat_buffer_head = 0; - memset(&cat_buffer, 0, CAT_BUFFER_SIZE); - continue; - } - cat_buffer_head++; - if (cat_buffer_head >= CAT_BUFFER_SIZE) - { - cat_buffer_head = 0; - memset(&cat_buffer, 0, CAT_BUFFER_SIZE); - } - } - } - } - return (USBD_OK); -} - -/** - * @brief CDC_Transmit_FS - * Data to send over USB IN endpoint are sent over CDC interface - * through this function. - * @note - * - * - * @param Buf: Buffer of data to be sent - * @param Len: Number of data to be sent (in bytes) - * @retval USBD_OK if all operations are OK else USBD_FAIL or USBD_BUSY - */ -static uint8_t CAT_Transmit_FS(uint8_t *Buf, uint16_t Len) -{ - uint8_t result = USBD_OK; - USBD_CAT_HandleTypeDef *hcdc = (USBD_CAT_HandleTypeDef *)hUsbDeviceFS.pClassDataCAT; - if (hcdc->TxState != 0) - { - return USBD_BUSY; - } - USBD_CAT_SetTxBuffer(&hUsbDeviceFS, Buf, Len); - result = USBD_CAT_TransmitPacket(&hUsbDeviceFS); - return result; -} - -static void CAT_Transmit(char *data) -{ - CAT_Transmit_FS((uint8_t *)data, (uint16_t)strlen(data)); - //sendToDebug_str3("CAT command answer: |",data,"|\r\n"); -} - -void ua3reo_dev_cat_parseCommand(void) -{ - USBD_CAT_ReceivePacket(&hUsbDeviceFS); //prepare next command - if (command_to_parse[0] == 0) - return; - - char _command_buffer[CAT_BUFFER_SIZE] = {0}; - char *_command = _command_buffer; - memcpy(_command, command_to_parse, CAT_BUFFER_SIZE); - memset(&command_to_parse, 0, CAT_BUFFER_SIZE); - while (*_command == '\r' || *_command == '\n' || *_command == ' ') //trim - _command++; - if (strlen(_command) < 2) - return; - //sendToDebug_str3("New CAT command: |",_command,"|\r\n"); - - char command[3] = {0}; - strncpy(command, _command, 2); - bool has_args = false; - char arguments[32] = {0}; - char ctmp[30] = {0}; - if (strlen(_command) > 2) - { - strncpy(arguments, _command + 2, strlen(_command) - 2); - has_args = true; - } - //sendToDebug_str3("Arguments: |",arguments,"|\r\n"); - - if (strcmp(command, "AI") == 0) // AUTO INFORMATION - { - if (!has_args) - { - CAT_Transmit("AI0;"); - } - else - { - //ничего не делаем, автоуведомления и так не работают - } - return; - } - - if (strcmp(command, "ID") == 0) // IDENTIFICATION - { - if (!has_args) - { - CAT_Transmit("ID0241;"); - } - else - { - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - return; - } - - if (strcmp(command, "FT") == 0) // FUNCTION TX - { - if (!has_args) - { - CAT_Transmit("FT0;"); - } - else - { - if (strcmp(arguments, "0") == 0) - { - } //SPLIT DONT SUPPOTED - else if (strcmp(arguments, "1") == 0) - { - } //SPLIT DONT SUPPOTED - else - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - return; - } - - if (strcmp(command, "VS") == 0) // VFO SELECT - { - if (!has_args) - { - if (!TRX.current_vfo) - CAT_Transmit("VS0;"); - else - CAT_Transmit("VS1;"); - } - else - { - if (strcmp(arguments, "0") == 0) - TRX.current_vfo = 0; - else if (strcmp(arguments, "1") == 0) - TRX.current_vfo = 1; - NeedSaveSettings = true; - NeedReinitAudioFilters = true; - LCD_redraw(false); - sendToDebug_str3("CAT arguments: ", _command, "\r\n"); - } - return; - } - - if (strcmp(command, "IF") == 0) // INFORMATION - { - if (!has_args) - { - char answer[30] = {0}; - strcat(answer, "IF001"); //memory channel - if (CurrentVFO()->Freq < 10000000) - strcat(answer, "0"); - sprintf(ctmp, "%u", CurrentVFO()->Freq); - strcat(answer, ctmp); //freq - strcat(answer, "+0000"); //clirifier offset - strcat(answer, "0"); //RX clar off - strcat(answer, "0"); //TX clar off - sprintf(ctmp, "%d", getFT450Mode((uint8_t)CurrentVFO()->Mode)); - strcat(answer, ctmp); //mode - strcat(answer, "0"); //VFO Memory - strcat(answer, "0"); //CTCSS OFF - strcat(answer, "00"); //TONE NUMBER - strcat(answer, "0;"); //Simplex - CAT_Transmit(answer); - } - else - { - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - return; - } - - if (strcmp(command, "FA") == 0) // FREQUENCY VFO-A - { - if (!has_args) - { - char answer[30] = {0}; - strcat(answer, "FA"); - if (TRX.VFO_A.Freq < 10000000) - strcat(answer, "0"); - sprintf(ctmp, "%u", TRX.VFO_A.Freq); - strcat(answer, ctmp); //freq - strcat(answer, ";"); - CAT_Transmit(answer); - } - else - { - if (TRX.current_vfo == 0) - TRX_setFrequency((uint32_t)atoi(arguments), CurrentVFO()); - TRX.VFO_A.Freq = (uint32_t)atoi(arguments); - LCD_UpdateQuery.FreqInfo = true; - LCD_UpdateQuery.TopButtons = true; - } - return; - } - - if (strcmp(command, "FB") == 0) // FREQUENCY VFO-B - { - if (!has_args) - { - char answer[30] = {0}; - strcat(answer, "FA"); - if (TRX.VFO_B.Freq < 10000000) - strcat(answer, "0"); - sprintf(ctmp, "%u", TRX.VFO_B.Freq); - strcat(answer, ctmp); //freq - strcat(answer, ";"); - CAT_Transmit(answer); - } - else - { - if (TRX.current_vfo == 1) - TRX_setFrequency((uint32_t)atoi(arguments), CurrentVFO()); - TRX.VFO_B.Freq = (uint32_t)atoi(arguments); - LCD_UpdateQuery.FreqInfo = true; - LCD_UpdateQuery.TopButtons = true; - } - return; - } - - if (strcmp(command, "RA") == 0) // RF ATTENUATOR - { - if (!has_args) - { - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - else - { - if (strcmp(arguments, "0") == 0) - CAT_Transmit("RA00;"); - else - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - return; - } - - if (strcmp(command, "PA") == 0) // PRE-AMP - { - if (!has_args) - { - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - else - { - if (strcmp(arguments, "0") == 0) - { - if (TRX.ADC_Driver) - CAT_Transmit("PA01;"); - else - CAT_Transmit("PA00;"); - } - else - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - return; - } - - if (strcmp(command, "PS") == 0) // POWER-SWITCH - { - if (!has_args) - { - CAT_Transmit("PS1;"); - } - else - { - if (strcmp(arguments, "0") == 0) - { - //power off - } - else if (strcmp(arguments, "1") == 0) - { - //power on - } - else - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - return; - } - - if (strcmp(command, "GT") == 0) // AGC FUNCTION - { - if (!has_args) - { - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - else - { - if (strcmp(arguments, "0") == 0) - { - if (TRX.RX_AGC_SSB_speed == 0 || !CurrentVFO()->AGC) - CAT_Transmit("GT00;"); - else if (TRX.RX_AGC_SSB_speed == 1) - CAT_Transmit("GT04;"); - else if (TRX.RX_AGC_SSB_speed == 2) - CAT_Transmit("GT03;"); - else if (TRX.RX_AGC_SSB_speed == 3) - CAT_Transmit("GT02;"); - else - CAT_Transmit("GT01;"); - } - else - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - return; - } - - if (strcmp(command, "MD") == 0) // MODE - { - if (!has_args) - { - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - else - { - if (strcmp(arguments, "0") == 0) - { - char answer[30] = {0}; - strcat(answer, "MD0"); - sprintf(ctmp, "%d", getFT450Mode((uint8_t)CurrentVFO()->Mode)); - strcat(answer, ctmp); //mode - strcat(answer, ";"); - CAT_Transmit(answer); - } - else - { - if (CurrentVFO()->Mode != setFT450Mode(arguments)) - { - TRX_setMode(setFT450Mode(arguments), CurrentVFO()); - LCD_UpdateQuery.TopButtons = true; - } - } - } - return; - } - - if (strcmp(command, "PC") == 0) // POWER CONTROL - { - if (!has_args) - { - char answer[30] = {0}; - strcat(answer, "PC"); - sprintf(ctmp, "%d", TRX.RF_Power); - strcat(answer, ctmp); - strcat(answer, ";"); - CAT_Transmit(answer); - } - else - { - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - return; - } - - if (strcmp(command, "SH") == 0) // WIDTH - { - if (!has_args) - { - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - else - { - if (strcmp(arguments, "0") == 0) - { - CAT_Transmit("SH016;"); - } - } - return; - } - - if (strcmp(command, "NB") == 0) // NOISE BLANKER - { - if (!has_args) - { - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - else - { - if (strcmp(arguments, "0") == 0) - { - CAT_Transmit("NB00;"); - } - else - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - return; - } - - if (strcmp(command, "NR") == 0) // NOISE REDUCTION - { - if (!has_args) - { - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - else - { - if (strcmp(arguments, "0") == 0) - { - CAT_Transmit("NR00;"); - } - else - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - return; - } - - if (strcmp(command, "VX") == 0) // VOX STATUS - { - if (!has_args) - { - CAT_Transmit("VX0;"); - } - else - { - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - return; - } - - if (strcmp(command, "CT") == 0) // CTCSS - { - if (!has_args) - { - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - else - { - if (strcmp(arguments, "0") == 0) - { - CAT_Transmit("CT00;"); - } - else - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - return; - } - - if (strcmp(command, "ML") == 0) // MONITOR LEVEL - { - if (!has_args) - { - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - else - { - if (strcmp(arguments, "0") == 0) - { - CAT_Transmit("ML00;"); - } - else - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - return; - } - - if (strcmp(command, "BP") == 0) // MANUAL NOTCH - { - if (!has_args) - { - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - else - { - if (strcmp(arguments, "00") == 0) - { - CAT_Transmit("BP00000;"); - } - else - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - return; - } - - if (strcmp(command, "BI") == 0) // BREAK IN - { - if (!has_args) - { - CAT_Transmit("BI0;"); - } - else - { - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - return; - } - - if (strcmp(command, "OS") == 0) // OFFSET - { - if (!has_args) - { - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - else - { - if (strcmp(arguments, "0") == 0) - { - CAT_Transmit("OS00;"); - } - else - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - return; - } - - if (strcmp(command, "NA") == 0) // NARROW - { - if (!has_args) - { - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - else - { - if (strcmp(arguments, "0") == 0) - CAT_Transmit("NA00;"); - } - return; - } - - if (strcmp(command, "SM") == 0) // READ S-METER - { - if (!has_args) - { - sendToDebug_str3("Unknown CAT arguments: ", _command, "\r\n"); - } - else - { - if (strcmp(arguments, "0") == 0) - CAT_Transmit("SM0100;"); - } - return; - } - - if (strcmp(command, "TX") == 0) // TX SET - { - if (!has_args) - { - if (TRX_ptt_soft) - CAT_Transmit("TX1;"); - else if (TRX_ptt_hard) - CAT_Transmit("TX2;"); - else - CAT_Transmit("TX0;"); - } - else - { - if (strcmp(arguments, "0") == 0) - { - TRX_ptt_soft = false; - } - if (strcmp(arguments, "1") == 0) - { - TRX_ptt_soft = true; - } - } - return; - } - - sendToDebug_str3("Unknown CAT command: ", _command, "\r\n"); - //sendToDebug_str2(command,"|\r\n"); - //sendToDebug_str2(arguments,"|\r\n"); -} - -static uint8_t getFT450Mode(uint8_t VFO_Mode) -{ - if (VFO_Mode == TRX_MODE_LSB) - return 1; - if (VFO_Mode == TRX_MODE_USB) - return 2; - if (VFO_Mode == TRX_MODE_IQ) - return 8; - if (VFO_Mode == TRX_MODE_CW_L) - return 3; - if (VFO_Mode == TRX_MODE_CW_U) - return 3; - if (VFO_Mode == TRX_MODE_DIGI_L) - return 6; - if (VFO_Mode == TRX_MODE_DIGI_U) - return 9; - if (VFO_Mode == TRX_MODE_NO_TX) - return 8; - if (VFO_Mode == TRX_MODE_NFM) - return 4; - if (VFO_Mode == TRX_MODE_WFM) - return 4; - if (VFO_Mode == TRX_MODE_AM) - return 5; - if (VFO_Mode == TRX_MODE_LOOPBACK) - return 8; - return 1; -} - -static uint8_t setFT450Mode(char *FT450_Mode) -{ - if (strcmp(FT450_Mode, "01") == 0) - return TRX_MODE_LSB; - if (strcmp(FT450_Mode, "02") == 0) - return TRX_MODE_USB; - if (strcmp(FT450_Mode, "08") == 0) - return TRX_MODE_IQ; - if (strcmp(FT450_Mode, "03") == 0) - return TRX_MODE_CW_L; - if (strcmp(FT450_Mode, "06") == 0) - return TRX_MODE_DIGI_L; - if (strcmp(FT450_Mode, "09") == 0) - return TRX_MODE_DIGI_U; - if (strcmp(FT450_Mode, "0C") == 0) - return TRX_MODE_DIGI_U; - if (strcmp(FT450_Mode, "04") == 0) - return TRX_MODE_NFM; - if (strcmp(FT450_Mode, "05") == 0) - return TRX_MODE_AM; - sendToDebug_str3("Unknown mode ", FT450_Mode, "\r\n"); - return TRX_MODE_USB; -} diff --git a/Src/usbd_cat_if.h b/Src/usbd_cat_if.h deleted file mode 100644 index 6b10169..0000000 --- a/Src/usbd_cat_if.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef __USBD_CDC_CAT_IF_H__ -#define __USBD_CDC_CAT_IF_H__ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "usbd_ua3reo.h" - - extern USBD_CAT_ItfTypeDef USBD_CAT_fops_FS; - extern void ua3reo_dev_cat_parseCommand(void); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Src/usbd_debug_if.c b/Src/usbd_debug_if.c deleted file mode 100644 index d292872..0000000 --- a/Src/usbd_debug_if.c +++ /dev/null @@ -1,241 +0,0 @@ -#include "usbd_debug_if.h" -#include "usbd_cat_if.h" -#include "trx_manager.h" -#include "lcd_driver.h" - -#define DEBUG_APP_RX_DATA_SIZE 8 -#define DEBUG_APP_TX_DATA_SIZE 64 -#define DEBUG_RX_FIFO_BUFFER_SIZE 128 -#define DEBUG_TX_FIFO_BUFFER_SIZE 256 - -static uint8_t DEBUG_UserRxBufferFS[DEBUG_APP_RX_DATA_SIZE]; -static uint8_t DEBUG_UserTxBufferFS[DEBUG_APP_TX_DATA_SIZE]; -static uint8_t debug_tx_fifo[DEBUG_TX_FIFO_BUFFER_SIZE] = {0}; -static uint16_t debug_tx_fifo_head = 0; -static uint16_t debug_tx_fifo_tail = 0; -static uint8_t lineCoding[7] = {0x00, 0xC2, 0x01, 0x00, 0x00, 0x00, 0x08}; // 115200bps, 1stop, no parity, 8bit - -extern USBD_HandleTypeDef hUsbDeviceFS; - -static int8_t DEBUG_Init_FS(void); -static int8_t DEBUG_DeInit_FS(void); -static int8_t DEBUG_Control_FS(uint8_t cmd, uint8_t *pbuf, uint32_t len); -static int8_t DEBUG_Receive_FS(uint8_t *pbuf); - -USBD_DEBUG_ItfTypeDef USBD_DEBUG_fops_FS = - { - DEBUG_Init_FS, - DEBUG_DeInit_FS, - DEBUG_Control_FS, - DEBUG_Receive_FS}; - -/* Private functions ---------------------------------------------------------*/ -/** - * @brief Initializes the CDC media low layer over the FS USB IP - * @retval USBD_OK if all operations are OK else USBD_FAIL - */ -static int8_t DEBUG_Init_FS(void) -{ - /* USER CODE BEGIN 3 */ - /* Set Application Buffers */ - USBD_DEBUG_SetTxBuffer(&hUsbDeviceFS, DEBUG_UserTxBufferFS, 0); - USBD_DEBUG_SetRxBuffer(&hUsbDeviceFS, DEBUG_UserRxBufferFS); - return (USBD_OK); - /* USER CODE END 3 */ -} - -/** - * @brief DeInitializes the CDC media low layer - * @retval USBD_OK if all operations are OK else USBD_FAIL - */ -static int8_t DEBUG_DeInit_FS(void) -{ - /* USER CODE BEGIN 4 */ - return (USBD_OK); - /* USER CODE END 4 */ -} - -/** - * @brief Manage the CDC class requests - * @param cmd: Command code - * @param pbuf: Buffer containing command data (request parameters) - * @param length: Number of data to be sent (in bytes) - * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL - */ -static int8_t DEBUG_Control_FS(uint8_t cmd, uint8_t *pbuf, uint32_t len) -{ - /* USER CODE BEGIN 5 */ - - switch (cmd) - { - case CDC_SEND_ENCAPSULATED_COMMAND: - break; - - case CDC_GET_ENCAPSULATED_RESPONSE: - break; - - case CDC_SET_COMM_FEATURE: - break; - - case CDC_GET_COMM_FEATURE: - break; - - case CDC_CLEAR_COMM_FEATURE: - break; - - /*******************************************************************************/ - /* Line Coding Structure */ - /*-----------------------------------------------------------------------------*/ - /* Offset | Field | Size | Value | Description */ - /* 0 | dwDTERate | 4 | Number |Data terminal rate, in bits per second*/ - /* 4 | bCharFormat | 1 | Number | Stop bits */ - /* 0 - 1 Stop bit */ - /* 1 - 1.5 Stop bits */ - /* 2 - 2 Stop bits */ - /* 5 | bParityType | 1 | Number | Parity */ - /* 0 - None */ - /* 1 - Odd */ - /* 2 - Even */ - /* 3 - Mark */ - /* 4 - Space */ - /* 6 | bDataBits | 1 | Number Data bits (5, 6, 7, 8 or 16). */ - /*******************************************************************************/ - case CDC_SET_LINE_CODING: - memcpy(lineCoding, pbuf, sizeof(lineCoding)); - break; - - case CDC_GET_LINE_CODING: - memcpy(pbuf, lineCoding, sizeof(lineCoding)); - break; - - case CDC_SET_CONTROL_LINE_STATE: - if (pbuf[2] == 1) - TRX_key_serial = true; - else - TRX_key_serial = false; - break; - - case CDC_SEND_BREAK: - break; - - default: - break; - } - - return (USBD_OK); - /* USER CODE END 5 */ -} - -/** - * @brief Data received over USB OUT endpoint are sent over CDC interface - * through this function. - * - * @note - * This function will block any OUT packet reception on USB endpoint - * untill exiting this function. If you exit this function before transfer - * is complete on CDC interface (ie. using DMA controller) it will result - * in receiving more data while previous ones are still not sent. - * - * @param Buf: Buffer of data to be received - * @param Len: Number of data received (in bytes) - * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL - */ -static int8_t DEBUG_Receive_FS(uint8_t *Buf) -{ - /* USER CODE BEGIN 6 */ - USBD_DEBUG_SetRxBuffer(&hUsbDeviceFS, &Buf[0]); - USBD_DEBUG_ReceivePacket(&hUsbDeviceFS); - return (USBD_OK); - /* USER CODE END 6 */ -} - -/** - * @brief CDC_Transmit_FS - * Data to send over USB IN endpoint are sent over CDC interface - * through this function. - * @note - * - * - * @param Buf: Buffer of data to be sent - * @param Len: Number of data to be sent (in bytes) - * @retval USBD_OK if all operations are OK else USBD_FAIL or USBD_BUSY - */ -uint8_t DEBUG_Transmit_FS(uint8_t *Buf, uint16_t Len) -{ - uint8_t result = USBD_OK; - /* USER CODE BEGIN 7 */ - USBD_DEBUG_HandleTypeDef *hcdc = (USBD_DEBUG_HandleTypeDef *)hUsbDeviceFS.pClassDataDEBUG; - if (hcdc->TxState != 0) - { - return USBD_BUSY; - } - USBD_DEBUG_SetTxBuffer(&hUsbDeviceFS, Buf, Len); - result = USBD_DEBUG_TransmitPacket(&hUsbDeviceFS); - /* USER CODE END 7 */ - return result; -} - -void DEBUG_Transmit_FIFO(uint8_t *data, uint16_t length) -{ - if (length <= DEBUG_TX_FIFO_BUFFER_SIZE) - for (uint16_t i = 0; i < length; i++) - { - debug_tx_fifo[debug_tx_fifo_head] = data[i]; - debug_tx_fifo_head++; - if (debug_tx_fifo_head == debug_tx_fifo_tail) - { - uint_fast16_t tryes = 0; - while (DEBUG_Transmit_FIFO_Events() == USBD_BUSY && tryes < 512) - tryes++; - if(DEBUG_Transmit_FIFO_Events() == USBD_BUSY) - break; - } - if (debug_tx_fifo_head >= DEBUG_TX_FIFO_BUFFER_SIZE) - debug_tx_fifo_head = 0; - } -} - -static uint8_t temp_buff[DEBUG_TX_FIFO_BUFFER_SIZE] = {0}; -static bool FIFO_Events_busy = false; -uint8_t DEBUG_Transmit_FIFO_Events(void) -{ - if (FIFO_Events_busy) - return USBD_FAIL; - if (debug_tx_fifo_head == debug_tx_fifo_tail) - return USBD_OK; - USBD_DEBUG_HandleTypeDef *hcdc = (USBD_DEBUG_HandleTypeDef *)hUsbDeviceFS.pClassDataDEBUG; - if (hcdc->TxState != 0) - return USBD_FAIL; - FIFO_Events_busy = true; - uint16_t indx = 0; - memset(temp_buff, 0x00, DEBUG_TX_FIFO_BUFFER_SIZE); - - if (debug_tx_fifo_tail > debug_tx_fifo_head) - { - for (uint16_t i = debug_tx_fifo_tail; i < DEBUG_TX_FIFO_BUFFER_SIZE; i++) - { - temp_buff[indx] = debug_tx_fifo[i]; - indx++; - debug_tx_fifo_tail++; - if (indx == DEBUG_APP_TX_DATA_SIZE) - break; - } - if (debug_tx_fifo_tail == DEBUG_TX_FIFO_BUFFER_SIZE) - debug_tx_fifo_tail = 0; - } - else if (debug_tx_fifo_tail < debug_tx_fifo_head) - { - for (uint16_t i = debug_tx_fifo_tail; i < debug_tx_fifo_head; i++) - { - temp_buff[indx] = debug_tx_fifo[i]; - indx++; - debug_tx_fifo_tail++; - if (indx == DEBUG_APP_TX_DATA_SIZE) - break; - } - } - - DEBUG_Transmit_FS(temp_buff, indx); - FIFO_Events_busy = false; - return USBD_BUSY; -} diff --git a/Src/usbd_debug_if.h b/Src/usbd_debug_if.h deleted file mode 100644 index 9b04585..0000000 --- a/Src/usbd_debug_if.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef __USBD_CDC_DEBUG_IF_H__ -#define __USBD_CDC_DEBUG_IF_H__ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "usbd_ua3reo.h" - - extern USBD_DEBUG_ItfTypeDef USBD_DEBUG_fops_FS; - uint8_t DEBUG_Transmit_FS(uint8_t *Buf, uint16_t Len); - - void DEBUG_Transmit_FIFO(uint8_t *data, uint16_t length); - extern uint8_t DEBUG_Transmit_FIFO_Events(void); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Src/usbd_ua3reo.c b/Src/usbd_ua3reo.c deleted file mode 100644 index 441d65e..0000000 --- a/Src/usbd_ua3reo.c +++ /dev/null @@ -1,1461 +0,0 @@ -#include "usb_device.h" -#include "usbd_ua3reo.h" -#include "usbd_audio_if.h" -#include "usbd_ctlreq.h" -#include "functions.h" -#include "wm8731.h" -#include "lcd_driver.h" -#include "stm32f4xx_ll_usb.h" - -static uint8_t USBD_UA3REO_Init(USBD_HandleTypeDef *pdev); -static uint8_t USBD_UA3REO_DeInit(USBD_HandleTypeDef *pdev); -static uint8_t USBD_UA3REO_Setup(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req); -static uint8_t USBD_UA3REO_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum); -static uint8_t USBD_UA3REO_DataOut(USBD_HandleTypeDef *pdev, uint8_t epnum); -static uint8_t USBD_UA3REO_EP0_RxReady(USBD_HandleTypeDef *pdev); -static uint8_t USBD_UA3REO_EP0_TxReady(void); -static uint8_t USBD_UA3REO_SOF(void); -static uint8_t USBD_UA3REO_IsoINIncomplete(void); -static uint8_t USBD_UA3REO_IsoOutIncomplete(void); -static void AUDIO_REQ_GetCurrent(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req); -static void AUDIO_REQ_SetCurrent(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req); -static const uint8_t *USBD_UA3REO_GetFSCfgDesc(uint16_t *length); -static const uint8_t *USBD_UA3REO_GetDeviceQualifierDescriptor(uint16_t *length); - -static uint16_t rx_buffer_head = 0; -static uint16_t rx_buffer_step = 0; - -volatile bool RX_USB_AUDIO_underrun = false; -volatile uint32_t RX_USB_AUDIO_SAMPLES = 0; -volatile uint32_t TX_USB_AUDIO_SAMPLES = 0; -volatile uint32_t USB_LastActiveTime = 0; - -/* USB Standard Device Descriptor */ -__ALIGN_BEGIN static const uint8_t USBD_UA3REO_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC] __ALIGN_END = - { - USB_LEN_DEV_QUALIFIER_DESC, - USB_DESC_TYPE_DEVICE_QUALIFIER, - 0x00, - 0x02, - 0x00, - 0x00, - 0x00, - 0x40, - 0x01, - 0x00, -}; - -/* UA3REO interface class callbacks structure */ -USBD_ClassTypeDef USBD_UA3REO = - { - USBD_UA3REO_Init, - USBD_UA3REO_DeInit, - USBD_UA3REO_Setup, - USBD_UA3REO_EP0_TxReady, - USBD_UA3REO_EP0_RxReady, - USBD_UA3REO_DataIn, - USBD_UA3REO_DataOut, - USBD_UA3REO_SOF, - USBD_UA3REO_IsoINIncomplete, - USBD_UA3REO_IsoOutIncomplete, - NULL, - USBD_UA3REO_GetFSCfgDesc, - NULL, - USBD_UA3REO_GetDeviceQualifierDescriptor, -}; - -/* USB CDC device Configuration Descriptor */ -__ALIGN_BEGIN static const uint8_t USBD_UA3REO_CfgFSDesc[USB_CDC_CONFIG_DESC_SIZ] __ALIGN_END = - { - /*Configuration Descriptor*/ - 0x09, /* bLength: Configuration Descriptor size */ - USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType: Configuration */ - (USB_CDC_CONFIG_DESC_SIZ & 0xFF), /* wTotalLength:no of returned bytes */ - USB_CDC_CONFIG_DESC_SIZ >> 8, - 0x07, /* bNumInterfaces: count interface */ - 0x01, /* bConfigurationValue: Configuration value */ - 0x00, /* iConfiguration: Index of string descriptor describing the configuration */ - 0xC0, /* bmAttributes: self powered */ - 0xFA, /* MaxPower 500 mA */ - - //--------------------------------------------------------------------------- - //DEBUG/KEY PORT - //Interface Association Descriptor: - //------------------------------ - 0x08, //bLength - 0x0B, //bDescriptorType - 0x00, //bFirstInterface - 0x02, //bInterfaceCount - 0x02, //bFunctionClass (Communication Device Class) - 0x02, //bFunctionSubClass (Abstract Control Model - ACM) - 0x01, //bFunctionProtocol (ITU-T V.250) - USBD_IDX_INTERFACE1_STR, //iFunction "" - - /*Interface Descriptor */ - 0x09, /* bLength: Interface Descriptor size */ - USB_DESC_TYPE_INTERFACE, /* bDescriptorType: Interface */ - /* Interface descriptor type */ - 0x00, /* bInterfaceNumber: Number of Interface */ - 0x00, /* bAlternateSetting: Alternate setting */ - 0x01, /* bNumEndpoints: One endpoints used */ - 0x02, /* bInterfaceClass: Communication Interface Class */ - 0x02, /* bInterfaceSubClass: Abstract Control Model */ - 0x01, /* bInterfaceProtocol: Common AT commands */ - USBD_IDX_INTERFACE1_STR, /* iInterface: */ - - /*Header Functional Descriptor*/ - 0x05, /* bLength: Endpoint Descriptor size */ - 0x24, /* bDescriptorType: CS_INTERFACE */ - 0x00, /* bDescriptorSubtype: Header Func Desc */ - 0x10, /* bcdCDC: spec release number */ - 0x01, - - /*Call Management Functional Descriptor*/ - 0x05, /* bFunctionLength */ - 0x24, /* bDescriptorType: CS_INTERFACE */ - 0x01, /* bDescriptorSubtype: Call Management Func Desc */ - 0x00, /* bmCapabilities: D0+D1 */ - 0x01, /* bDataInterface: 1 */ - - /*ACM Functional Descriptor*/ - 0x04, /* bFunctionLength */ - 0x24, /* bDescriptorType: CS_INTERFACE */ - 0x02, /* bDescriptorSubtype: Abstract Control Management desc */ - 0x02, /* bmCapabilities */ - - /*Union Functional Descriptor*/ - 0x05, /* bFunctionLength */ - 0x24, /* bDescriptorType: CS_INTERFACE */ - 0x06, /* bDescriptorSubtype: Union func desc */ - 0x00, /* bMasterInterface: Communication class interface */ - 0x01, /* bSlaveInterface0: Data Class Interface */ - - //--------------------------------------------------------------------------- - - /*Endpoint CMD Descriptor*/ - 0x07, /* bLength: Endpoint Descriptor size */ - USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */ - DEBUG_CMD_EP, /* bEndpointAddress */ - 0x03, /* bmAttributes: Interrupt */ - LOBYTE(CDC_CMD_PACKET_SIZE), /* wMaxPacketSize: */ - HIBYTE(CDC_CMD_PACKET_SIZE), - 0x10, /* bInterval: */ - - /*Data class interface descriptor*/ - 0x09, /* bLength: Endpoint Descriptor size */ - USB_DESC_TYPE_INTERFACE, /* bDescriptorType: */ - 0x01, /* bInterfaceNumber: Number of Interface */ - 0x00, /* bAlternateSetting: Alternate setting */ - 0x02, /* bNumEndpoints: Two endpoints used */ - 0x0A, /* bInterfaceClass: CDC */ - 0x00, /* bInterfaceSubClass: */ - 0x00, /* bInterfaceProtocol: */ - USBD_IDX_INTERFACE1_STR, /* iInterface: */ - - /*Endpoint OUT Descriptor*/ - 0x07, /* bLength: Endpoint Descriptor size */ - USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */ - DEBUG_OUT_EP, /* bEndpointAddress */ - 0x02, /* bmAttributes: Bulk */ - LOBYTE(CDC_DATA_FS_MAX_PACKET_SIZE), /* wMaxPacketSize: */ - HIBYTE(CDC_DATA_FS_MAX_PACKET_SIZE), - 0x01, /* bInterval: ignore for Bulk transfer */ - - /*Endpoint IN Descriptor*/ - 0x07, /* bLength: Endpoint Descriptor size */ - USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */ - DEBUG_IN_EP, /* bEndpointAddress */ - 0x02, /* bmAttributes: Bulk */ - LOBYTE(CDC_DATA_FS_MAX_PACKET_SIZE), /* wMaxPacketSize: */ - HIBYTE(CDC_DATA_FS_MAX_PACKET_SIZE), - 0x01, /* bInterval: ignore for Bulk transfer */ - - //--------------------------------------------------------------------------- - - //CAT PORT - //Interface Association Descriptor: - //------------------------------ - 0x08, //bLength - 0x0B, //bDescriptorType - 0x02, //bFirstInterface - 0x02, //bInterfaceCount - 0x02, //bFunctionClass (Communication Device Class) - 0x02, //bFunctionSubClass (Abstract Control Model - ACM) - 0x01, //bFunctionProtocol (ITU-T V.250) - USBD_IDX_INTERFACE2_STR, //iFunction "" - - /*Interface Descriptor */ - 0x09, /* bLength: Interface Descriptor size */ - USB_DESC_TYPE_INTERFACE, /* bDescriptorType: Interface */ - /* Interface descriptor type */ - 0x02, /* bInterfaceNumber: Number of Interface */ - 0x00, /* bAlternateSetting: Alternate setting */ - 0x01, /* bNumEndpoints: One endpoints used */ - 0x02, /* bInterfaceClass: Communication Interface Class */ - 0x02, /* bInterfaceSubClass: Abstract Control Model */ - 0x01, /* bInterfaceProtocol: Common AT commands */ - USBD_IDX_INTERFACE2_STR, /* iInterface: */ - - /*Header Functional Descriptor*/ - 0x05, /* bLength: Endpoint Descriptor size */ - 0x24, /* bDescriptorType: CS_INTERFACE */ - 0x00, /* bDescriptorSubtype: Header Func Desc */ - 0x10, /* bcdCDC: spec release number */ - 0x01, - - /*Call Management Functional Descriptor*/ - 0x05, /* bFunctionLength */ - 0x24, /* bDescriptorType: CS_INTERFACE */ - 0x01, /* bDescriptorSubtype: Call Management Func Desc */ - 0x00, /* bmCapabilities: D0+D1 */ - 0x03, /* bDataInterface: 1 */ - - /*ACM Functional Descriptor*/ - 0x04, /* bFunctionLength */ - 0x24, /* bDescriptorType: CS_INTERFACE */ - 0x02, /* bDescriptorSubtype: Abstract Control Management desc */ - 0x02, /* bmCapabilities */ - - /*Union Functional Descriptor*/ - 0x05, /* bFunctionLength */ - 0x24, /* bDescriptorType: CS_INTERFACE */ - 0x06, /* bDescriptorSubtype: Union func desc */ - 0x02, /* bMasterInterface: Communication class interface */ - 0x03, /* bSlaveInterface0: Data Class Interface */ - - //--------------------------------------------------------------------------- - - /*Endpoint CMD Descriptor*/ - 0x07, /* bLength: Endpoint Descriptor size */ - USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */ - CAT_CMD_EP, /* bEndpointAddress */ - 0x03, /* bmAttributes: Interrupt */ - LOBYTE(CDC_CMD_PACKET_SIZE), /* wMaxPacketSize: */ - HIBYTE(CDC_CMD_PACKET_SIZE), - 0x10, /* bInterval: */ - - /*Data class interface descriptor*/ - 0x09, /* bLength: Endpoint Descriptor size */ - USB_DESC_TYPE_INTERFACE, /* bDescriptorType: */ - 0x03, /* bInterfaceNumber: Number of Interface */ - 0x00, /* bAlternateSetting: Alternate setting */ - 0x02, /* bNumEndpoints: Two endpoints used */ - 0x0A, /* bInterfaceClass: CDC */ - 0x00, /* bInterfaceSubClass: */ - 0x00, /* bInterfaceProtocol: */ - USBD_IDX_INTERFACE2_STR, /* iInterface: */ - - /*Endpoint OUT Descriptor*/ - 0x07, /* bLength: Endpoint Descriptor size */ - USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */ - CAT_OUT_EP, /* bEndpointAddress */ - 0x02, /* bmAttributes: Bulk */ - LOBYTE(CDC_DATA_FS_MAX_PACKET_SIZE), /* wMaxPacketSize: */ - HIBYTE(CDC_DATA_FS_MAX_PACKET_SIZE), - 0x01, /* bInterval: ignore for Bulk transfer */ - - /*Endpoint IN Descriptor*/ - 0x07, /* bLength: Endpoint Descriptor size */ - USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */ - CAT_IN_EP, /* bEndpointAddress */ - 0x02, /* bmAttributes: Bulk */ - LOBYTE(CDC_DATA_FS_MAX_PACKET_SIZE), /* wMaxPacketSize: */ - HIBYTE(CDC_DATA_FS_MAX_PACKET_SIZE), - 0x01, /* bInterval: ignore for Bulk transfer */ - - //--------------------------------------------------------------------------- - - //AUDIO RX PORT - //Interface Association Descriptor: - //------------------------------ - 0x08, // bLength - 0x0B, // bDescriptorType - 0x04, // bFirstInterface - 0x03, // bInterfaceCount - 0x01, // bFunctionClass (Audio Device Class) - 0x00, // bFunctionSubClass - 0x00, // bFunctionProtocol - USBD_IDX_INTERFACE3_STR, // iFunction "UA3REO Transceiver AUDIO RX" - - //Interface Descriptor (Control): - //------------------------------ - 0x09, // bLength - 0x04, // bDescriptorType - 0x04, // bInterfaceNumber - 0x00, // bAlternateSetting - 0x00, // bNumEndPoints - 0x01, // bInterfaceClass (Audio Device Class) - 0x01, // bInterfaceSubClass (Audio Control Interface) - 0x00, // bInterfaceProtocol - USBD_IDX_INTERFACE3_STR, // iInterface "" - - //AC Interface Header Descriptor (Control): - //------------------------------ - 0x0A, // bLength - 0x24, // bDescriptorType - 0x01, // bDescriptorSubtype - 0x00, // - 0x01, // bcdADC - 0x34, // wTotalLength (52 bytes) - 0x00, // wTotalLength - 0x02, // bInCollection - 0x05, // baInterfaceNr(1) - 0x06, // baInterfaceNr(2) - - //AC Input Terminal Descriptor (Microphone): - //------------------------------ - 0x0C, // bLength - 0x24, // bDescriptorType - 0x02, // bDescriptorSubtype - 0x1E, // bTerminalID - 0x10, // wTerminalType (Radio Receiver) - 0x07, // wTerminalType (Radio Receiver) - 0x00, // bAssocTerminal - 0x02, // bNrChannels (2 channels) - 0x03, // wChannelConfig - 0x00, // wChannelConfig - 0x00, // iChannelNames - 0x00, // iTerminal - - //AC Output Terminal Descriptor (Microphone): - //------------------------------ - 0x09, // bLength - 0x24, // bDescriptorType - 0x03, // bDescriptorSubtype - 0x23, // bTerminalID - 0x01, // wTerminalType (USB Streaming) - 0x01, // wTerminalType (USB Streaming) - 0x00, // bAssocTerminal - 0x1E, // bSourceID - 0x00, // iTerminal "wwww 1" - - //AC Input Terminal Descriptor (Speaker): - //------------------------------ - 0x0C, // bLength - 0x24, // bDescriptorType - 0x02, // bDescriptorSubtype - 0x0C, // bTerminalID - 0x01, // wTerminalType (USB Streaming) - 0x01, // wTerminalType (USB Streaming) - 0x00, // bAssocTerminal - 0x02, // bNrChannels (2 channels) - 0x03, // wChannelConfig - 0x00, // wChannelConfig - 0x1B, // iChannelNames - 0x00, // iTerminal "eeee 3" - - //AC Output Terminal Descriptor (Speaker): - //------------------------------ - 0x09, // bLength - 0x24, // bDescriptorType - 0x03, // bDescriptorSubtype - 0x11, // bTerminalID - 0x11, // wTerminalType (Radio Transmitter) - 0x07, // wTerminalType (Radio Transmitter) - 0x00, // bAssocTerminal - 0x0C, // bSourceID - 0x00, // iTerminal - - //Interface Descriptor (Microphone): - //------------------------------ - 0x09, // bLength - 0x04, // bDescriptorType - 0x05, // bInterfaceNumber - 0x00, // bAlternateSetting - 0x00, // bNumEndPoints - 0x01, // bInterfaceClass (Audio Device Class) - 0x02, // bInterfaceSubClass (Audio Streaming Interface) - 0x00, // bInterfaceProtocol - USBD_IDX_INTERFACE3_STR, // iInterface "xxxx 1" - - //Interface Descriptor (Microphone): - //------------------------------ - 0x09, // bLength - 0x04, // bDescriptorType - 0x05, // bInterfaceNumber - 0x01, // bAlternateSetting - 0x01, // bNumEndPoints - 0x01, // bInterfaceClass (Audio Device Class) - 0x02, // bInterfaceSubClass (Audio Streaming Interface) - 0x00, // bInterfaceProtocol - USBD_IDX_INTERFACE3_STR, // iInterface "xxxx 1" - - //AS Interface Descriptor (Microphone): - //------------------------------ - 0x07, // bLength - 0x24, // bDescriptorType - 0x01, // bDescriptorSubtype - 0x23, // bTerminalLink - 0x01, // bDelay - 0x01, // wFormatTag (PCM) - 0x00, // wFormatTag (PCM) - - //AS Format Type 1 Descriptor (Microphone): - //------------------------------ - 0x0B, // bLength - 0x24, // bDescriptorType - 0x02, // bDescriptorSubtype - 0x01, // bFormatType (FORMAT_TYPE_1) - 0x02, // bNrChannels (2 channels) - 0x03, // bSubframeSize - 0x18, // bBitResolution (24 bits per sample) - 0x01, // bSamFreqType (Discrete sampling frequencies) - 0x80, // tSamFreq(1) (48000 Hz) - 0xBB, // tSamFreq(1) (48000 Hz) - 0x00, // tSamFreq(1) (48000 Hz) - - //Endpoint Descriptor (Audio/MIDI 1.0) (Microphone): - //------------------------------ - 0x09, // bLength - 0x05, // bDescriptorType - AUDIO_IN_EP, // bEndpointAddress (IN endpoint 1) - 0x0D, // bmAttributes (Transfer: Isochronous / Synch: Synchronous / Usage: Data) - LOBYTE(AUDIO_OUT_PACKET), /* wMaxPacketSize: */ - HIBYTE(AUDIO_OUT_PACKET), - 0x01, // bInterval (1 frames) - 0x00, // bRefresh - 0x00, // bSynchAddress - - //AS Isochronous Data Endpoint Descriptor (Microphone): - //------------------------------ - 0x07, // bLength - 0x25, // bDescriptorType - 0x01, // bDescriptorSubtype - 0x00, // bmAttributes - 0x02, // bLockDelayUnits (decoded PCM samples) - 0x00, // wLockDelay - 0x00, // wLockDelay - - //Interface Descriptor (Speaker): - //------------------------------ - 0x09, // bLength - 0x04, // bDescriptorType - 0x06, // bInterfaceNumber - 0x00, // bAlternateSetting - 0x00, // bNumEndPoints - 0x01, // bInterfaceClass (Audio Device Class) - 0x02, // bInterfaceSubClass (Audio Streaming Interface) - 0x00, // bInterfaceProtocol - USBD_IDX_INTERFACE3_STR, // iInterface "yyyy 3" - - //Interface Descriptor (Speaker): - //------------------------------ - 0x09, // bLength - 0x04, // bDescriptorType - 0x06, // bInterfaceNumber - 0x01, // bAlternateSetting - 0x01, // bNumEndPoints - 0x01, // bInterfaceClass (Audio Device Class) - 0x02, // bInterfaceSubClass (Audio Streaming Interface) - 0x00, // bInterfaceProtocol - USBD_IDX_INTERFACE3_STR, // iInterface "zzzz 3" - - //AS Interface Descriptor (Speaker): - //------------------------------ - 0x07, // bLength - 0x24, // bDescriptorType - 0x01, // bDescriptorSubtype - 0x0C, // bTerminalLink - 0x01, // bDelay - 0x01, // wFormatTag (PCM) - 0x00, // wFormatTag (PCM) - - //AS Format Type 1 Descriptor (Speaker): - //------------------------------ - 0x0B, // bLength - 0x24, // bDescriptorType - 0x02, // bDescriptorSubtype - 0x01, // bFormatType (FORMAT_TYPE_1) - 0x02, // bNrChannels (2 channels) - 0x03, // bSubframeSize - 0x18, // bBitResolution (24 bits per sample) - 0x01, // bSamFreqType (Discrete sampling frequencies) - 0x80, // tSamFreq(1) (48000 Hz) - 0xBB, // tSamFreq(1) (48000 Hz) - 0x00, // tSamFreq(1) (48000 Hz) - - //Endpoint Descriptor (Audio/MIDI 1.0) (Speaker): - //------------------------------ - 0x09, // bLength - 0x05, // bDescriptorType - AUDIO_OUT_EP, // bEndpointAddress (OUT endpoint 1) - 0x05, // bmAttributes (Transfer: Isochronous / Synch: Asynchronous / Usage: Data) - LOBYTE(AUDIO_OUT_PACKET), /* wMaxPacketSize: */ - HIBYTE(AUDIO_OUT_PACKET), - 0x01, // bInterval (1 frames) - 0x00, // bRefresh - 0x00, // bSynchAddress - - //AS Isochronous Data Endpoint Descriptor (Speaker): - //------------------------------ - 0x07, // bLength - 0x25, // bDescriptorType - 0x01, // bDescriptorSubtype - 0x00, // bmAttributes - 0x00, // bLockDelayUnits (undefined) - 0x00, // wLockDelay - 0x00, // wLockDelay -}; - -/** - * @} - */ - -/** @defgroup USBD_CDC_Private_Functions - * @{ - */ - -/** - * @brief USBD_CDC_Init - * Initialize the CDC interface - * @param pdev: device instance - * @param cfgidx: Configuration index - * @retval status - */ -static uint8_t USBD_UA3REO_Init(USBD_HandleTypeDef *pdev) -{ - USB_LastActiveTime = HAL_GetTick(); - uint8_t ret = 0U; - USBD_DEBUG_HandleTypeDef *hcdc_debug; - USBD_CAT_HandleTypeDef *hcdc_cat; - USBD_AUDIO_HandleTypeDef *haudio; - - /* Open EP IN */ - USBD_LL_OpenEP(pdev, DEBUG_IN_EP, USBD_EP_TYPE_BULK, CDC_DATA_FS_IN_PACKET_SIZE); //-V525 - USBD_LL_OpenEP(pdev, CAT_IN_EP, USBD_EP_TYPE_BULK, CDC_DATA_FS_IN_PACKET_SIZE); - USBD_LL_OpenEP(pdev, AUDIO_IN_EP, USBD_EP_TYPE_ISOC, AUDIO_OUT_PACKET); - - pdev->ep_in[DEBUG_IN_EP & 0xFU].is_used = 1U; - pdev->ep_in[CAT_IN_EP & 0xFU].is_used = 1U; - pdev->ep_in[AUDIO_IN_EP & 0xFU].is_used = 1U; - - /* Open EP OUT */ - USBD_LL_OpenEP(pdev, DEBUG_OUT_EP, USBD_EP_TYPE_BULK, CDC_DATA_FS_OUT_PACKET_SIZE); //-V525 - USBD_LL_OpenEP(pdev, CAT_OUT_EP, USBD_EP_TYPE_BULK, CDC_DATA_FS_OUT_PACKET_SIZE); - USBD_LL_OpenEP(pdev, AUDIO_OUT_EP, USBD_EP_TYPE_ISOC, AUDIO_OUT_PACKET); - - pdev->ep_out[DEBUG_OUT_EP & 0xFU].is_used = 1U; - pdev->ep_out[CAT_OUT_EP & 0xFU].is_used = 1U; - pdev->ep_out[AUDIO_OUT_EP & 0xFU].is_used = 1U; - - //INT EP - USBD_LL_OpenEP(pdev, DEBUG_CMD_EP, USBD_EP_TYPE_INTR, CDC_CMD_PACKET_SIZE); - USBD_LL_OpenEP(pdev, CAT_CMD_EP, USBD_EP_TYPE_INTR, CDC_CMD_PACKET_SIZE); - pdev->ep_in[DEBUG_CMD_EP & 0xFU].is_used = 1U; - pdev->ep_in[CAT_CMD_EP & 0xFU].is_used = 1U; - - pdev->pClassDataDEBUG = USBD_malloc(sizeof(USBD_DEBUG_HandleTypeDef)); - memset(pdev->pClassDataDEBUG,0,sizeof(USBD_DEBUG_HandleTypeDef)); - pdev->pClassDataCAT = USBD_malloc(sizeof(USBD_CAT_HandleTypeDef)); - memset(pdev->pClassDataCAT,0,sizeof(USBD_CAT_HandleTypeDef)); - pdev->pClassDataAUDIO = USBD_malloc(sizeof(USBD_AUDIO_HandleTypeDef)); - memset(pdev->pClassDataAUDIO,0,sizeof(USBD_AUDIO_HandleTypeDef)); - - if (pdev->pClassDataDEBUG == NULL) - { - ret = 1U; - return ret; - } - else - { - hcdc_debug = (USBD_DEBUG_HandleTypeDef *)pdev->pClassDataDEBUG; - - /* Init physical Interface components */ - ((USBD_DEBUG_ItfTypeDef *)pdev->pUserDataDEBUG)->Init(); - - /* Init Xfer states */ - hcdc_debug->TxState = 0U; - hcdc_debug->RxState = 0U; - - /* Prepare Out endpoint to receive next packet */ - USBD_LL_PrepareReceive(pdev, DEBUG_OUT_EP, hcdc_debug->RxBuffer, CDC_DATA_FS_OUT_PACKET_SIZE); - } - - if (pdev->pClassDataCAT == NULL) - { - ret = 1U; - return ret; - } - else - { - hcdc_cat = (USBD_CAT_HandleTypeDef *)pdev->pClassDataCAT; - - ((USBD_CAT_ItfTypeDef *)pdev->pUserDataCAT)->Init(); - - hcdc_cat->TxState = 0U; - hcdc_cat->RxState = 0U; - - USBD_LL_PrepareReceive(pdev, CAT_OUT_EP, hcdc_cat->RxBuffer, CDC_DATA_FS_OUT_PACKET_SIZE); - } - - if (pdev->pClassDataAUDIO == NULL) - { - ret = 1U; - return ret; - } - else - { - haudio = (USBD_AUDIO_HandleTypeDef *)pdev->pClassDataAUDIO; - haudio->alt_setting = 0U; - - // Initialize the Audio output Hardware layer - if (((USBD_AUDIO_ItfTypeDef *)pdev->pUserDataAUDIO)->Init() != 0) - { - return USBD_FAIL; - } - } - return ret; -} - -/** - * @brief USBD_CDC_Init - * DeInitialize the CDC layer - * @param pdev: device instance - * @param cfgidx: Configuration index - * @retval status - */ -static uint8_t USBD_UA3REO_DeInit(USBD_HandleTypeDef *pdev) -{ - uint8_t ret = 0U; - - /* Close EP IN */ - USBD_LL_CloseEP(pdev, DEBUG_IN_EP); - USBD_LL_CloseEP(pdev, CAT_IN_EP); - USBD_LL_CloseEP(pdev, AUDIO_IN_EP); - pdev->ep_in[DEBUG_IN_EP & 0xFU].is_used = 0U; - pdev->ep_in[CAT_IN_EP & 0xFU].is_used = 0U; - pdev->ep_in[AUDIO_IN_EP & 0xFU].is_used = 0U; - - /* Close EP OUT */ - USBD_LL_CloseEP(pdev, DEBUG_OUT_EP); - USBD_LL_CloseEP(pdev, CAT_OUT_EP); - USBD_LL_CloseEP(pdev, AUDIO_OUT_EP); - pdev->ep_out[DEBUG_OUT_EP & 0xFU].is_used = 0U; - pdev->ep_out[CAT_OUT_EP & 0xFU].is_used = 0U; - pdev->ep_out[AUDIO_OUT_EP & 0xFU].is_used = 0U; - - //CLOSE INT EP - USBD_LL_CloseEP(pdev, DEBUG_CMD_EP); - USBD_LL_CloseEP(pdev, CAT_CMD_EP); - pdev->ep_in[DEBUG_CMD_EP & 0xFU].is_used = 0U; - pdev->ep_in[CAT_CMD_EP & 0xFU].is_used = 0U; - - /* DeInit physical Interface components */ - if (pdev->pClassDataDEBUG != NULL) - { - ((USBD_DEBUG_ItfTypeDef *)pdev->pUserDataDEBUG)->DeInit(); - USBD_free(pdev->pClassDataDEBUG); - pdev->pClassDataDEBUG = NULL; - } - if (pdev->pClassDataCAT != NULL) - { - ((USBD_CAT_ItfTypeDef *)pdev->pUserDataCAT)->DeInit(); - USBD_free(pdev->pClassDataCAT); - pdev->pClassDataCAT = NULL; - } - if (pdev->pClassDataAUDIO != NULL) - { - ((USBD_AUDIO_ItfTypeDef *)pdev->pUserDataAUDIO)->DeInit(); - USBD_free(pdev->pClassDataAUDIO); - pdev->pClassDataAUDIO = NULL; - } - return ret; -} - -/** - * @brief USBD_CDC_Setup - * Handle the CDC specific requests - * @param pdev: instance - * @param req: usb requests - * @retval status - */ -static uint8_t USBD_DEBUG_Setup(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) -{ - USB_LastActiveTime = HAL_GetTick(); - USBD_DEBUG_HandleTypeDef *hcdc_debug = (USBD_DEBUG_HandleTypeDef *)pdev->pClassDataDEBUG; - uint8_t ifalt = 0U; - uint16_t status_info = 0U; - uint8_t ret = USBD_OK; - - switch (req->bmRequest & USB_REQ_TYPE_MASK) - { - case USB_REQ_TYPE_CLASS: - if (req->wLength) - { - if (req->bmRequest & 0x80U) - { - ((USBD_DEBUG_ItfTypeDef *)pdev->pUserDataDEBUG)->Control(req->bRequest, (uint8_t *)(void *)hcdc_debug->data, req->wLength); - USBD_CtlSendData(pdev, (uint8_t *)(void *)hcdc_debug->data, req->wLength); - } - else - { - hcdc_debug->CmdOpCode = req->bRequest; - hcdc_debug->CmdLength = (uint8_t)req->wLength; - USBD_CtlPrepareRx(pdev, (uint8_t *)(void *)hcdc_debug->data, req->wLength); - } - } - else - { - ((USBD_DEBUG_ItfTypeDef *)pdev->pUserDataDEBUG)->Control(req->bRequest, (uint8_t *)(void *)req, req->wLength); - } - break; - - case USB_REQ_TYPE_STANDARD: - switch (req->bRequest) - { - case USB_REQ_GET_STATUS: - if (pdev->dev_state == USBD_STATE_CONFIGURED) - { - USBD_CtlSendData(pdev, (uint8_t *)(void *)&status_info, 2U); - } - else - { - USBD_CtlError(pdev); - ret = USBD_FAIL; - } - break; - - case USB_REQ_GET_INTERFACE: - if (pdev->dev_state == USBD_STATE_CONFIGURED) - { - USBD_CtlSendData(pdev, &ifalt, 1U); - } - else - { - USBD_CtlError(pdev); - ret = USBD_FAIL; - } - break; - - case USB_REQ_SET_INTERFACE: - if (pdev->dev_state != USBD_STATE_CONFIGURED) - { - USBD_CtlError(pdev); - ret = USBD_FAIL; - } - break; - - default: - USBD_CtlError(pdev); - ret = USBD_FAIL; - break; - } - break; - - default: - USBD_CtlError(pdev); - ret = USBD_FAIL; - break; - } - return ret; -} -static uint8_t USBD_CAT_Setup(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) -{ - USBD_CAT_HandleTypeDef *hcdc_cat = (USBD_CAT_HandleTypeDef *)pdev->pClassDataCAT; - uint8_t ifalt = 0U; - uint16_t status_info = 0U; - uint8_t ret = USBD_OK; - - switch (req->bmRequest & USB_REQ_TYPE_MASK) - { - case USB_REQ_TYPE_CLASS: - if (req->wLength) - { - if (req->bmRequest & 0x80U) - { - ((USBD_CAT_ItfTypeDef *)pdev->pUserDataCAT)->Control(req->bRequest, (uint8_t *)(void *)hcdc_cat->data); - USBD_CtlSendData(pdev, (uint8_t *)(void *)hcdc_cat->data, req->wLength); - } - else - { - hcdc_cat->CmdOpCode = req->bRequest; - hcdc_cat->CmdLength = (uint8_t)req->wLength; - USBD_CtlPrepareRx(pdev, (uint8_t *)(void *)hcdc_cat->data, req->wLength); - } - } - else - { - ((USBD_CAT_ItfTypeDef *)pdev->pUserDataCAT)->Control(req->bRequest, (uint8_t *)(void *)req); - } - break; - - case USB_REQ_TYPE_STANDARD: - switch (req->bRequest) - { - case USB_REQ_GET_STATUS: - if (pdev->dev_state == USBD_STATE_CONFIGURED) - { - USBD_CtlSendData(pdev, (uint8_t *)(void *)&status_info, 2U); - } - else - { - USBD_CtlError(pdev); - ret = USBD_FAIL; - } - break; - - case USB_REQ_GET_INTERFACE: - if (pdev->dev_state == USBD_STATE_CONFIGURED) - { - USBD_CtlSendData(pdev, &ifalt, 1U); - } - else - { - USBD_CtlError(pdev); - ret = USBD_FAIL; - } - break; - - case USB_REQ_SET_INTERFACE: - if (pdev->dev_state != USBD_STATE_CONFIGURED) - { - USBD_CtlError(pdev); - ret = USBD_FAIL; - } - break; - - default: - USBD_CtlError(pdev); - ret = USBD_FAIL; - break; - } - break; - - default: - USBD_CtlError(pdev); - ret = USBD_FAIL; - break; - } - return ret; -} - -static uint8_t USBD_AUDIO_Setup(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) -{ - USBD_AUDIO_HandleTypeDef *haudio; - uint16_t status_info = 0U; - uint8_t ret = USBD_OK; - - haudio = (USBD_AUDIO_HandleTypeDef *)pdev->pClassDataAUDIO; - - switch (req->bmRequest & USB_REQ_TYPE_MASK) - { - case USB_REQ_TYPE_CLASS: - switch (req->bRequest) - { - case AUDIO_REQ_GET_CUR: - AUDIO_REQ_GetCurrent(pdev, req); - break; - - case AUDIO_REQ_SET_CUR: - AUDIO_REQ_SetCurrent(pdev, req); - break; - - default: - USBD_CtlError(pdev); - ret = USBD_FAIL; - break; - } - break; - - case USB_REQ_TYPE_STANDARD: - switch (req->bRequest) - { - case USB_REQ_GET_STATUS: - if (pdev->dev_state == USBD_STATE_CONFIGURED) - { - USBD_CtlSendData(pdev, (uint8_t *)(void *)&status_info, 2U); - } - else - { - USBD_CtlError(pdev); - ret = USBD_FAIL; - } - break; - - case USB_REQ_GET_DESCRIPTOR: - if ((req->wValue >> 8) == AUDIO_DESCRIPTOR_TYPE) - { - //pbuf = USBD_AUDIO_CfgDesc + 18; - //len = MIN(USB_AUDIO_DESC_SIZ , req->wLength); - //USBD_CtlSendData (pdev, pbuf, len); - } - break; - - case USB_REQ_GET_INTERFACE: - if (pdev->dev_state == USBD_STATE_CONFIGURED) - { - USBD_CtlSendData(pdev, (uint8_t *)(void *)&haudio->alt_setting, 1U); - } - else - { - USBD_CtlError(pdev); - ret = USBD_FAIL; - } - break; - - case USB_REQ_SET_INTERFACE: - if (pdev->dev_state == USBD_STATE_CONFIGURED) - { - if ((uint8_t)(req->wValue) <= USBD_MAX_NUM_INTERFACES) - { - haudio->alt_setting = (uint8_t)(req->wValue); - } - else - { - /* Call the error management function (command will be nacked */ - USBD_CtlError(pdev); - ret = USBD_FAIL; - } - } - else - { - USBD_CtlError(pdev); - ret = USBD_FAIL; - } - break; - - default: - USBD_CtlError(pdev); - ret = USBD_FAIL; - break; - } - break; - default: - USBD_CtlError(pdev); - ret = USBD_FAIL; - break; - } - return ret; -} - -static uint8_t USBD_UA3REO_Setup(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) -{ - USB_LastActiveTime = HAL_GetTick(); - uint8_t ret = 0; - // Route requests to MSC interface or its endpoints to MSC class implementaion - if (((req->bmRequest & USB_REQ_RECIPIENT_MASK) == USB_REQ_RECIPIENT_INTERFACE && req->wIndex == DEBUG_INTERFACE_IDX) || - ((req->bmRequest & USB_REQ_RECIPIENT_MASK) == USB_REQ_RECIPIENT_ENDPOINT && ((req->wIndex & 0x7F) == DEBUG_EP_IDX))) - { - ret = USBD_DEBUG_Setup(pdev, req); - } - else if (((req->bmRequest & USB_REQ_RECIPIENT_MASK) == USB_REQ_RECIPIENT_INTERFACE && req->wIndex == AUDIO_INTERFACE_IDX) || - ((req->bmRequest & USB_REQ_RECIPIENT_MASK) == USB_REQ_RECIPIENT_ENDPOINT && ((req->wIndex & 0x7F) == AUDIO_EP_IDX))) - { - ret = USBD_AUDIO_Setup(pdev, req); - } - else - ret = USBD_CAT_Setup(pdev, req); - return ret; -} - -/** - * @brief USBD_CDC_DataIn - * Data sent on non-control IN endpoint - * @param pdev: device instance - * @param epnum: endpoint number - * @retval status - */ -static uint8_t USBD_DEBUG_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum) -{ - USBD_DEBUG_HandleTypeDef *hcdc_debug = (USBD_DEBUG_HandleTypeDef *)pdev->pClassDataDEBUG; - PCD_HandleTypeDef *hpcd_debug = pdev->pUserDataDEBUG; - - if (pdev->pClassDataDEBUG != NULL) - { - if ((pdev->ep_in[epnum].total_length > 0U) && ((pdev->ep_in[epnum].total_length % hpcd_debug->IN_ep[epnum].maxpacket) == 0U)) - { - /* Update the packet total length */ - pdev->ep_in[epnum].total_length = 0U; - - /* Send ZLP */ - USBD_LL_Transmit(pdev, epnum, NULL, 0U); - } - else - { - hcdc_debug->TxState = 0U; - } - return USBD_OK; - } - else - { - return USBD_FAIL; - } -} - -static uint8_t USBD_CAT_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum) -{ - USBD_CAT_HandleTypeDef *hcdc_cat = (USBD_CAT_HandleTypeDef *)pdev->pClassDataCAT; - PCD_HandleTypeDef *hpcd_cat = pdev->pUserDataCAT; - - if (pdev->pClassDataCAT != NULL) - { - if ((pdev->ep_in[epnum].total_length > 0U) && ((pdev->ep_in[epnum].total_length % hpcd_cat->IN_ep[epnum].maxpacket) == 0U)) - { - /* Update the packet total length */ - pdev->ep_in[epnum].total_length = 0U; - - /* Send ZLP */ - USBD_LL_Transmit(pdev, epnum, NULL, 0U); - } - else - { - hcdc_cat->TxState = 0U; - } - return USBD_OK; - } - else - { - return USBD_FAIL; - } -} - -static uint8_t USBD_AUDIO_DataIn(USBD_HandleTypeDef *pdev) -{ - //Send audio to Host - USBD_AUDIO_HandleTypeDef *hcdc_audio = (USBD_AUDIO_HandleTypeDef *)pdev->pClassDataAUDIO; - if (rx_buffer_head >= USB_AUDIO_RX_BUFFER_SIZE) - { - if (USB_AUDIO_need_rx_buffer == true) - { - RX_USB_AUDIO_underrun = true; - } - else - { - if (USB_AUDIO_current_rx_buffer) - hcdc_audio->RxBuffer = (uint8_t *)&USB_AUDIO_rx_buffer_b; - else - hcdc_audio->RxBuffer = (uint8_t *)&USB_AUDIO_rx_buffer_a; - USB_AUDIO_current_rx_buffer = !USB_AUDIO_current_rx_buffer; - USB_AUDIO_need_rx_buffer = true; - rx_buffer_head = 0; - } - } - if ((USB_AUDIO_RX_BUFFER_SIZE - rx_buffer_head) >= AUDIO_OUT_PACKET) //-V658 - rx_buffer_step = AUDIO_OUT_PACKET; - else - rx_buffer_step = (USB_AUDIO_RX_BUFFER_SIZE - rx_buffer_head); - - pdev->ep_in[AUDIO_IN_EP & 0xFU].total_length = rx_buffer_step; - HAL_PCD_EP_Transmit(pdev->pData, AUDIO_IN_EP, hcdc_audio->RxBuffer + rx_buffer_head, rx_buffer_step); - RX_USB_AUDIO_SAMPLES += rx_buffer_step / (BYTES_IN_SAMPLE_AUDIO_OUT_PACKET * 2); //3 byte (24 bit) * 2 channel - rx_buffer_head += rx_buffer_step; - - return USBD_OK; -} -static uint8_t USBD_UA3REO_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum) -{ - if (epnum == AUDIO_EP_IDX) - return USBD_AUDIO_DataIn(pdev); - if (epnum == DEBUG_EP_IDX) - return USBD_DEBUG_DataIn(pdev, epnum); - if (epnum == CAT_EP_IDX) - return USBD_CAT_DataIn(pdev, epnum); - return USBD_FAIL; -} -/** - * @brief USBD_CDC_DataOut - * Data received on non-control Out endpoint - * @param pdev: device instance - * @param epnum: endpoint number - * @retval status - */ -static uint8_t USBD_DEBUG_DataOut(USBD_HandleTypeDef *pdev, uint8_t epnum) -{ - USB_LastActiveTime = HAL_GetTick(); - USBD_DEBUG_HandleTypeDef *hcdc_debug = (USBD_DEBUG_HandleTypeDef *)pdev->pClassDataDEBUG; - /* Get the received data length */ - hcdc_debug->RxLength = USBD_LL_GetRxDataSize(pdev, epnum); - /* USB data will be immediately processed, this allow next USB traffic being NAKed till the end of the application Xfer */ - if (pdev->pClassDataDEBUG != NULL) - { - ((USBD_DEBUG_ItfTypeDef *)pdev->pUserDataDEBUG)->Receive(hcdc_debug->RxBuffer); - return USBD_OK; - } - else - { - return USBD_FAIL; - } -} - -static uint8_t USBD_CAT_DataOut(USBD_HandleTypeDef *pdev, uint8_t epnum) -{ - USB_LastActiveTime = HAL_GetTick(); - USBD_CAT_HandleTypeDef *hcdc_cat = (USBD_CAT_HandleTypeDef *)pdev->pClassDataCAT; - /* Get the received data length */ - hcdc_cat->RxLength = USBD_LL_GetRxDataSize(pdev, epnum); - /* USB data will be immediately processed, this allow next USB traffic being - NAKed till the end of the application Xfer */ - if (pdev->pClassDataCAT != NULL) - { - ((USBD_CAT_ItfTypeDef *)pdev->pUserDataCAT)->Receive(hcdc_cat->RxBuffer, &hcdc_cat->RxLength); - return USBD_OK; - } - else - { - return USBD_FAIL; - } -} - -static uint8_t USBD_AUDIO_DataOut(USBD_HandleTypeDef *pdev, uint8_t epnum) -{ - USB_LastActiveTime = HAL_GetTick(); - USBD_AUDIO_HandleTypeDef *haudio = (USBD_AUDIO_HandleTypeDef *)pdev->pClassDataAUDIO; - if (epnum == AUDIO_OUT_EP) - { - haudio->TxBufferIndex += AUDIO_OUT_PACKET; - if (haudio->TxBufferIndex > (USB_AUDIO_TX_BUFFER_SIZE - AUDIO_OUT_PACKET)) - haudio->TxBufferIndex = 0; - USBD_LL_PrepareReceive(pdev, AUDIO_OUT_EP, haudio->TxBuffer + haudio->TxBufferIndex, AUDIO_OUT_PACKET); - TX_USB_AUDIO_SAMPLES += AUDIO_OUT_PACKET / (BYTES_IN_SAMPLE_AUDIO_OUT_PACKET * 2); //3 byte (24 bit) * 2 channel - } - return USBD_OK; -} - -static uint8_t USBD_UA3REO_DataOut(USBD_HandleTypeDef *pdev, uint8_t epnum) -{ - if (epnum == DEBUG_EP_IDX) - return USBD_DEBUG_DataOut(pdev, epnum); - if (epnum == CAT_EP_IDX) - return USBD_CAT_DataOut(pdev, epnum); - if (epnum == AUDIO_EP_IDX) - return USBD_AUDIO_DataOut(pdev, epnum); - return USBD_FAIL; -} - -/** - * @brief USBD_CDC_EP0_RxReady - * Handle EP0 Rx Ready event - * @param pdev: device instance - * @retval status - */ - -static uint8_t USBD_UA3REO_EP0_RxReady(USBD_HandleTypeDef *pdev) -{ - USB_LastActiveTime = HAL_GetTick(); - USBD_DEBUG_HandleTypeDef *hcdc_debug = (USBD_DEBUG_HandleTypeDef *)pdev->pClassDataDEBUG; - USBD_CAT_HandleTypeDef *hcdc_cat = (USBD_CAT_HandleTypeDef *)pdev->pClassDataCAT; - //DEBUG - if ((pdev->pUserDataDEBUG != NULL) && (hcdc_debug->CmdOpCode != 0xFFU)) - { - ((USBD_DEBUG_ItfTypeDef *)pdev->pUserDataDEBUG)->Control(hcdc_debug->CmdOpCode, (uint8_t *)(void *)hcdc_debug->data, 0); - hcdc_debug->CmdOpCode = 0xFFU; - } - //CAT - if ((pdev->pUserDataCAT != NULL) && (hcdc_cat->CmdOpCode != 0xFFU)) - { - ((USBD_CAT_ItfTypeDef *)pdev->pUserDataCAT)->Control(hcdc_cat->CmdOpCode, (uint8_t *)(void *)hcdc_cat->data); - hcdc_cat->CmdOpCode = 0xFFU; - } - //AUDIO - USBD_AUDIO_HandleTypeDef *haudio; - haudio = (USBD_AUDIO_HandleTypeDef *)pdev->pClassDataAUDIO; - - if (haudio->control.cmd == AUDIO_REQ_SET_CUR) - { - if (haudio->control.unit == AUDIO_OUT_STREAMING_CTRL) - { - haudio->control.cmd = 0U; - haudio->control.len = 0U; - } - } - return USBD_OK; -} - -static uint8_t USBD_UA3REO_EP0_TxReady(void) -{ - /* Only OUT control data are processed */ - return USBD_OK; -} - -static uint8_t USBD_UA3REO_IsoINIncomplete(void) -{ - return USBD_OK; -} - -static uint8_t USBD_UA3REO_IsoOutIncomplete(void) -{ - return USBD_OK; -} - -/** - * @brief USBD_CDC_GetFSCfgDesc - * Return configuration descriptor - * @param speed : current device speed - * @param length : pointer data length - * @retval pointer to descriptor buffer - */ -static const uint8_t *USBD_UA3REO_GetFSCfgDesc(uint16_t *length) -{ - *length = sizeof(USBD_UA3REO_CfgFSDesc); - return USBD_UA3REO_CfgFSDesc; -} - -/** -* @brief DeviceQualifierDescriptor -* return Device Qualifier descriptor -* @param length : pointer data length -* @retval pointer to descriptor buffer -*/ -static const uint8_t *USBD_UA3REO_GetDeviceQualifierDescriptor(uint16_t *length) -{ - *length = sizeof(USBD_UA3REO_DeviceQualifierDesc); - return USBD_UA3REO_DeviceQualifierDesc; -} - -/** -* @brief USBD_CDC_RegisterInterface - * @param pdev: device instance - * @param fops: CD Interface callback - * @retval status - */ -uint8_t USBD_DEBUG_RegisterInterface(USBD_HandleTypeDef *pdev, USBD_DEBUG_ItfTypeDef *fops) -{ - uint8_t ret = USBD_FAIL; - if (fops != NULL) - { - pdev->pUserDataDEBUG = fops; - ret = USBD_OK; - } - return ret; -} - -uint8_t USBD_CAT_RegisterInterface(USBD_HandleTypeDef *pdev, USBD_CAT_ItfTypeDef *fops) -{ - uint8_t ret = USBD_FAIL; - if (fops != NULL) - { - pdev->pUserDataCAT = fops; - ret = USBD_OK; - } - return ret; -} - -uint8_t USBD_AUDIO_RegisterInterface(USBD_HandleTypeDef *pdev, USBD_AUDIO_ItfTypeDef *fops) -{ - if (fops != NULL) - { - pdev->pUserDataAUDIO = fops; - } - return USBD_OK; -} - -/** - * @brief USBD_CDC_SetTxBuffer - * @param pdev: device instance - * @param pbuff: Tx Buffer - * @retval status - */ -uint8_t USBD_DEBUG_SetTxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff, uint16_t length) -{ - USBD_DEBUG_HandleTypeDef *hcdc = (USBD_DEBUG_HandleTypeDef *)pdev->pClassDataDEBUG; - hcdc->TxBuffer = pbuff; - hcdc->TxLength = length; - return USBD_OK; -} - -uint8_t USBD_CAT_SetTxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff, uint16_t length) -{ - USBD_CAT_HandleTypeDef *hcdc = (USBD_CAT_HandleTypeDef *)pdev->pClassDataCAT; - hcdc->TxBuffer = pbuff; - hcdc->TxLength = length; - return USBD_OK; -} - -/** - * @brief USBD_CDC_SetRxBuffer - * @param pdev: device instance - * @param pbuff: Rx Buffer - * @retval status - */ -uint8_t USBD_DEBUG_SetRxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff) -{ - USBD_DEBUG_HandleTypeDef *hcdc = (USBD_DEBUG_HandleTypeDef *)pdev->pClassDataDEBUG; - hcdc->RxBuffer = pbuff; - return USBD_OK; -} - -uint8_t USBD_CAT_SetRxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff) -{ - USBD_CAT_HandleTypeDef *hcdc = (USBD_CAT_HandleTypeDef *)pdev->pClassDataCAT; - hcdc->RxBuffer = pbuff; - return USBD_OK; -} - -/** - * @brief USBD_CDC_TransmitPacket - * Transmit packet on IN endpoint - * @param pdev: device instance - * @retval status - */ -uint8_t USBD_DEBUG_TransmitPacket(USBD_HandleTypeDef *pdev) -{ - USBD_DEBUG_HandleTypeDef *hcdc = (USBD_DEBUG_HandleTypeDef *)pdev->pClassDataDEBUG; - if (pdev->pClassDataDEBUG != NULL) - { - if (hcdc->TxState == 0U) - { - /* Tx Transfer in progress */ - hcdc->TxState = 1U; - /* Update the packet total length */ - pdev->ep_in[DEBUG_IN_EP & 0xFU].total_length = hcdc->TxLength; - /* Transmit next packet */ - USBD_LL_Transmit(pdev, DEBUG_IN_EP, hcdc->TxBuffer, (uint16_t)hcdc->TxLength); - return USBD_OK; - } - else - { - return USBD_BUSY; - } - } - else - { - return USBD_FAIL; - } -} - -uint8_t USBD_CAT_TransmitPacket(USBD_HandleTypeDef *pdev) -{ - USBD_CAT_HandleTypeDef *hcdc = (USBD_CAT_HandleTypeDef *)pdev->pClassDataCAT; - if (pdev->pClassDataCAT != NULL) - { - if (hcdc->TxState == 0U) - { - hcdc->TxState = 1U; - pdev->ep_in[CAT_IN_EP & 0xFU].total_length = hcdc->TxLength; - USBD_LL_Transmit(pdev, CAT_IN_EP, hcdc->TxBuffer, (uint16_t)hcdc->TxLength); - return USBD_OK; - } - else - { - return USBD_BUSY; - } - } - else - { - return USBD_FAIL; - } -} - -uint8_t USBD_AUDIO_StartTransmit(USBD_HandleTypeDef *pdev) -{ - if (pdev->pClassDataAUDIO != NULL) - { - USBD_AUDIO_DataIn(pdev); - return USBD_OK; - } - else - { - return USBD_FAIL; - } -} - -uint8_t USBD_AUDIO_StartReceive(USBD_HandleTypeDef *pdev) -{ - USBD_AUDIO_HandleTypeDef *haudio = (USBD_AUDIO_HandleTypeDef *)pdev->pClassDataAUDIO; - if (pdev->pClassDataAUDIO != NULL) - { - sendToDebug_str("[OK] Start Receive USB Audio\r\n"); - USBD_LL_PrepareReceive(pdev, AUDIO_OUT_EP, haudio->TxBuffer + haudio->TxBufferIndex, AUDIO_OUT_PACKET); - return USBD_OK; - } - else - { - return USBD_FAIL; - } -} - -/** - * @brief USBD_CDC_ReceivePacket - * prepare OUT Endpoint for reception - * @param pdev: device instance - * @retval status - */ -uint8_t USBD_DEBUG_ReceivePacket(USBD_HandleTypeDef *pdev) -{ - USBD_DEBUG_HandleTypeDef *hcdc = (USBD_DEBUG_HandleTypeDef *)pdev->pClassDataDEBUG; - /* Suspend or Resume USB Out process */ - if (pdev->pClassDataDEBUG != NULL) - { - /* Prepare Out endpoint to receive next packet */ - USBD_LL_PrepareReceive(pdev, DEBUG_OUT_EP, hcdc->RxBuffer, CDC_DATA_FS_OUT_PACKET_SIZE); - return USBD_OK; - } - else - { - return USBD_FAIL; - } -} - -uint8_t USBD_CAT_ReceivePacket(USBD_HandleTypeDef *pdev) -{ - USBD_CAT_HandleTypeDef *hcdc = (USBD_CAT_HandleTypeDef *)pdev->pClassDataCAT; - /* Suspend or Resume USB Out process */ - if (pdev->pClassDataCAT != NULL) - { - /* Prepare Out endpoint to receive next packet */ - USBD_LL_PrepareReceive(pdev, CAT_OUT_EP, hcdc->RxBuffer, CDC_DATA_FS_OUT_PACKET_SIZE); - return USBD_OK; - } - else - { - return USBD_FAIL; - } -} - -static void AUDIO_REQ_GetCurrent(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) -{ - USBD_AUDIO_HandleTypeDef *haudio; - haudio = (USBD_AUDIO_HandleTypeDef *)pdev->pClassDataAUDIO; - - memset(haudio->control.data, 0, sizeof(haudio->control.data)); - - /* Send the current mute state */ - USBD_CtlSendData(pdev, haudio->control.data, req->wLength); -} - -/** - * @brief AUDIO_Req_SetCurrent - * Handles the SET_CUR Audio control request. - * @param pdev: instance - * @param req: setup class request - * @retval status - */ -static void AUDIO_REQ_SetCurrent(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) -{ - USBD_AUDIO_HandleTypeDef *haudio; - haudio = (USBD_AUDIO_HandleTypeDef *)pdev->pClassDataAUDIO; - - if (req->wLength) - { - /* Prepare the reception of the buffer over EP0 */ - USBD_CtlPrepareRx(pdev, - haudio->control.data, - req->wLength); - - haudio->control.cmd = AUDIO_REQ_SET_CUR; /* Set the request value */ - haudio->control.len = (uint8_t)req->wLength; /* Set the request data length */ - haudio->control.unit = HIBYTE(req->wIndex); /* Set the request target unit */ - } -} - -static uint8_t USBD_UA3REO_SOF(void) -{ - USB_LastActiveTime = HAL_GetTick(); - return USBD_OK; -} - -void USBD_Restart(void) -{ - MX_USB_DevDisconnect(); - GPIO_InitTypeDef GPIO_InitStruct = {0}; - //GPIO_InitStruct.Pin = GPIO_PIN_11 | GPIO_PIN_12; - GPIO_InitStruct.Pin = GPIO_PIN_12; - GPIO_InitStruct.Pull = GPIO_PULLUP; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - //HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_SET); - //HAL_Delay(1000); - - MX_USB_DEVICE_Init(); - USB_LastActiveTime = HAL_GetTick(); -} diff --git a/Src/usbd_ua3reo.h b/Src/usbd_ua3reo.h deleted file mode 100644 index 4ecebeb..0000000 --- a/Src/usbd_ua3reo.h +++ /dev/null @@ -1,209 +0,0 @@ -#ifndef __USB_CDC_H -#define __USB_CDC_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include "usbd_ioreq.h" -#include "audio_processor.h" - -#define DEBUG_INTERFACE_IDX 0x0 // Index of DEBUG interface -#define CAT_INTERFACE_IDX 0x2 // Index of CAT interface -#define AUDIO_INTERFACE_IDX 0x4 // Index of AUDIO interface - -#define DEBUG_EP_IDX 0x01 -#define CAT_EP_IDX 0x02 -#define AUDIO_EP_IDX 0x03 -#define DEBUG_CMD_IDX 0x04 -#define CAT_CMD_IDX 0x04 - -#define IN_EP_DIR 0x80 // Adds a direction bit - -#define DEBUG_OUT_EP DEBUG_EP_IDX -#define DEBUG_IN_EP (DEBUG_EP_IDX | IN_EP_DIR) -#define DEBUG_CMD_EP (DEBUG_CMD_IDX | IN_EP_DIR) - -#define CAT_OUT_EP CAT_EP_IDX -#define CAT_IN_EP (CAT_EP_IDX | IN_EP_DIR) -#define CAT_CMD_EP (CAT_CMD_IDX | IN_EP_DIR) - -#define AUDIO_OUT_EP AUDIO_EP_IDX -#define AUDIO_IN_EP (AUDIO_EP_IDX | IN_EP_DIR) - -#ifndef CDC_HS_BINTERVAL -#define CDC_HS_BINTERVAL 0x10U -#endif /* CDC_HS_BINTERVAL */ - -#ifndef CDC_FS_BINTERVAL -#define CDC_FS_BINTERVAL 0x10U -#endif /* CDC_FS_BINTERVAL */ - -/* CDC Endpoints parameters: you can fine tune these values depending on the needed baudrates and performance. */ -#define CDC_DATA_HS_MAX_PACKET_SIZE 16U /* Endpoint IN & OUT Packet size */ -#define CDC_DATA_FS_MAX_PACKET_SIZE 16U /* Endpoint IN & OUT Packet size */ -#define CDC_CMD_PACKET_SIZE 16U /* Control Endpoint Packet size */ - -#define USB_CDC_CONFIG_DESC_SIZ 314U - -#define CDC_DATA_HS_IN_PACKET_SIZE CDC_DATA_HS_MAX_PACKET_SIZE -#define CDC_DATA_HS_OUT_PACKET_SIZE CDC_DATA_HS_MAX_PACKET_SIZE - -#define CDC_DATA_FS_IN_PACKET_SIZE CDC_DATA_FS_MAX_PACKET_SIZE -#define CDC_DATA_FS_OUT_PACKET_SIZE CDC_DATA_FS_MAX_PACKET_SIZE - -/*---------------------------------------------------------------------*/ -/* CDC definitions */ -/*---------------------------------------------------------------------*/ -#define CDC_SEND_ENCAPSULATED_COMMAND 0x00U -#define CDC_GET_ENCAPSULATED_RESPONSE 0x01U -#define CDC_SET_COMM_FEATURE 0x02U -#define CDC_GET_COMM_FEATURE 0x03U -#define CDC_CLEAR_COMM_FEATURE 0x04U -#define CDC_SET_LINE_CODING 0x20U -#define CDC_GET_LINE_CODING 0x21U -#define CDC_SET_CONTROL_LINE_STATE 0x22U -#define CDC_SEND_BREAK 0x23U - -//AUDIO -#define USBD_AUDIO_FREQ 48000U -#define BYTES_IN_SAMPLE_AUDIO_OUT_PACKET 3U //24bit -#define AUDIO_OUT_PACKET (BYTES_IN_SAMPLE_AUDIO_OUT_PACKET * 2 * (USBD_AUDIO_FREQ / 1000)) //3bytes (24bit) * 2 channel * 48 packet per second -#define USB_AUDIO_RX_BUFFER_SIZE (AUDIO_BUFFER_SIZE * BYTES_IN_SAMPLE_AUDIO_OUT_PACKET) //24 bit -#define USB_AUDIO_TX_BUFFER_SIZE (AUDIO_BUFFER_SIZE * BYTES_IN_SAMPLE_AUDIO_OUT_PACKET * 2) //24 bit x2 size - -#define AUDIO_REQ_GET_CUR 0x81U -#define AUDIO_REQ_SET_CUR 0x01U -#define AUDIO_OUT_STREAMING_CTRL 0x02U -#define USB_AUDIO_DESC_SIZ 0x09U -#define AUDIO_DESCRIPTOR_TYPE 0x21U - - extern volatile uint32_t RX_USB_AUDIO_SAMPLES; - extern volatile uint32_t TX_USB_AUDIO_SAMPLES; - extern volatile bool RX_USB_AUDIO_underrun; - extern volatile uint32_t USB_LastActiveTime; - - typedef struct - { - uint32_t bitrate; - uint8_t format; - uint8_t paritytype; - uint8_t datatype; - } USBD_CDC_LineCodingTypeDef; - - typedef enum - { - AUDIO_CMD_START = 1, - AUDIO_CMD_PLAY, - AUDIO_CMD_STOP, - } AUDIO_CMD_TypeDef; - - typedef enum - { - AUDIO_OFFSET_NONE = 0, - AUDIO_OFFSET_HALF, - AUDIO_OFFSET_FULL, - AUDIO_OFFSET_UNKNOWN, - } AUDIO_OffsetTypeDef; - - typedef struct - { - uint8_t cmd; - uint8_t data[USB_MAX_EP0_SIZE]; - uint8_t len; - uint8_t unit; - } USBD_AUDIO_ControlTypeDef; - - typedef struct _USBD_DEBUG_Itf - { - int8_t (*Init)(void); - int8_t (*DeInit)(void); - int8_t (*Control)(uint8_t cmd, uint8_t *pbuf, uint32_t len); - int8_t (*Receive)(uint8_t *Buf); - - } USBD_DEBUG_ItfTypeDef; - - typedef struct _USBD_CAT_Itf - { - int8_t (*Init)(void); - int8_t (*DeInit)(void); - int8_t (*Control)(uint8_t cmd, uint8_t *pbuf); - int8_t (*Receive)(uint8_t *Buf, uint32_t *Len); - - } USBD_CAT_ItfTypeDef; - - typedef struct - { - int8_t (*Init)(void); - int8_t (*DeInit)(void); - } USBD_AUDIO_ItfTypeDef; - - typedef struct - { - uint32_t alt_setting; - USBD_AUDIO_ControlTypeDef control; - uint8_t *RxBuffer; - uint8_t *TxBuffer; - uint32_t TxBufferIndex; - } USBD_AUDIO_HandleTypeDef; - - typedef struct - { - uint32_t data[CDC_DATA_HS_MAX_PACKET_SIZE / 4U]; /* Force 32bits alignment */ - uint8_t CmdOpCode; - uint8_t CmdLength; - uint8_t *RxBuffer; - uint8_t *TxBuffer; - uint32_t RxLength; - uint32_t TxLength; - - __IO uint32_t TxState; - __IO uint32_t RxState; - } USBD_DEBUG_HandleTypeDef; - - typedef struct - { - uint32_t data[CDC_DATA_HS_MAX_PACKET_SIZE / 4U]; /* Force 32bits alignment */ - uint8_t CmdOpCode; - uint8_t CmdLength; - uint8_t *RxBuffer; - uint8_t *TxBuffer; - uint32_t RxLength; - uint32_t TxLength; - - __IO uint32_t TxState; - __IO uint32_t RxState; - } USBD_CAT_HandleTypeDef; - - extern USBD_ClassTypeDef USBD_UA3REO; - extern USBD_HandleTypeDef hUsbDeviceFS; - -#define USBD_UA3REO_CLASS &USBD_UA3REO - - extern uint8_t USBD_DEBUG_RegisterInterface(USBD_HandleTypeDef *pdev, USBD_DEBUG_ItfTypeDef *fops); - extern uint8_t USBD_DEBUG_SetTxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff, uint16_t length); - extern uint8_t USBD_DEBUG_SetRxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff); - extern uint8_t USBD_DEBUG_ReceivePacket(USBD_HandleTypeDef *pdev); - extern uint8_t USBD_DEBUG_TransmitPacket(USBD_HandleTypeDef *pdev); - - extern uint8_t USBD_CAT_RegisterInterface(USBD_HandleTypeDef *pdev, USBD_CAT_ItfTypeDef *fops); - extern uint8_t USBD_CAT_SetTxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff, uint16_t length); - extern uint8_t USBD_CAT_SetRxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff); - extern uint8_t USBD_CAT_ReceivePacket(USBD_HandleTypeDef *pdev); - extern uint8_t USBD_CAT_TransmitPacket(USBD_HandleTypeDef *pdev); - - extern uint8_t USBD_AUDIO_RegisterInterface(USBD_HandleTypeDef *pdev, USBD_AUDIO_ItfTypeDef *fops); - extern uint8_t USBD_AUDIO_StartTransmit(USBD_HandleTypeDef *pdev); - extern uint8_t USBD_AUDIO_StartReceive(USBD_HandleTypeDef *pdev); - extern void USBD_Restart(void); - - /** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Src/wm8731.c b/Src/wm8731.c deleted file mode 100644 index 5493ab4..0000000 --- a/Src/wm8731.c +++ /dev/null @@ -1,223 +0,0 @@ -#include "stm32f4xx_hal.h" -#include "wm8731.h" -#include "trx_manager.h" -#include "i2c.h" -#include "lcd.h" -#include "agc.h" -#include "usbd_audio_if.h" - -//Public variables -uint32_t WM8731_DMA_samples = 0; // count the number of samples passed to the audio codec -bool WM8731_DMA_state = true; // what part of the buffer we are working with, true - compleate; false - half -bool WM8731_Buffer_underrun = false; // lack of data in the buffer from the audio processor -IRAM1 int32_t CODEC_Audio_Buffer_RX[CODEC_AUDIO_BUFFER_SIZE] = {0}; // audio codec ring buffers -IRAM1 int32_t CODEC_Audio_Buffer_TX[CODEC_AUDIO_BUFFER_SIZE] = {0}; -bool WM8731_Beeping; //Beeping flag -bool WM8731_Muting; //Muting flag - -//Private variables - -//Prototypes -static uint8_t WM8731_SendI2CCommand(uint8_t reg, uint8_t value); // send I2C command to codec -static HAL_StatusTypeDef HAL_I2S_TXRX_DMA(I2S_HandleTypeDef *hi2s, uint16_t *txData, uint16_t *rxData, uint16_t txSize, uint16_t rxSize); // Full-duplex implementation of I2S startup -static void I2SEx_Fix(I2S_HandleTypeDef *hi2s); - -// start the I2S bus -void WM8731_start_i2s_and_dma(void) -{ - WM8731_CleanBuffer(); - if (HAL_I2S_GetState(&hi2s3) == HAL_I2S_STATE_READY) - { - HAL_I2SEx_TransmitReceive_DMA(&hi2s3, (uint16_t*)&CODEC_Audio_Buffer_RX[0], (uint16_t*)&CODEC_Audio_Buffer_TX[0], CODEC_AUDIO_BUFFER_SIZE); - I2SEx_Fix(&hi2s3); - } -} - -// clear the audio codec and USB audio buffer -void WM8731_CleanBuffer(void) -{ - memset(CODEC_Audio_Buffer_RX, 0x00, sizeof CODEC_Audio_Buffer_RX); - memset(CODEC_Audio_Buffer_TX, 0x00, sizeof CODEC_Audio_Buffer_TX); - memset(USB_AUDIO_rx_buffer_a, 0x00, sizeof USB_AUDIO_rx_buffer_a); - memset(USB_AUDIO_rx_buffer_b, 0x00, sizeof USB_AUDIO_rx_buffer_a); - memset(USB_AUDIO_tx_buffer, 0x00, sizeof USB_AUDIO_tx_buffer); - ResetAGC(); -} - -// send I2C command to codec -static uint8_t WM8731_SendI2CCommand(uint8_t reg, uint8_t value) -{ - uint8_t st = 2; - uint8_t repeats = 0; - while (st != 0 && repeats < 3) - { - i2c_beginTransmission_u8(&I2C_WM8731, B8(0011010)); //I2C_ADDRESS_WM8731 00110100 - i2c_write_u8(&I2C_WM8731, reg); // MSB - i2c_write_u8(&I2C_WM8731, value); // MSB - st = i2c_endTransmission(&I2C_WM8731); - if (st != 0) - repeats++; - HAL_Delay(1); - } - return st; -} - -// switch to TX mode (mute the speaker, etc.) -void WM8731_TX_mode(void) -{ - WM8731_SendI2CCommand(B8(00000101), B8(10000000)); //R2 Left Headphone Out - WM8731_SendI2CCommand(B8(00000111), B8(10000000)); //R3 Right Headphone Out - WM8731_SendI2CCommand(B8(00001010), B8(00011110)); //R5 Digital Audio Path Control - if (TRX.InputType_LINE) //line - { - WM8731_SendI2CCommand(B8(00000000), B8(00010111)); //R0 Left Line In - WM8731_SendI2CCommand(B8(00000010), B8(00010111)); //R1 Right Line In - WM8731_SendI2CCommand(B8(00001000), B8(00000010)); //R4 Analogue Audio Path Control - WM8731_SendI2CCommand(B8(00001100), B8(01101010)); //R6 Power Down Control - } - if (TRX.InputType_MIC) //mic - { - WM8731_SendI2CCommand(B8(00000001), B8(10000000)); //R0 Left Line In - WM8731_SendI2CCommand(B8(00000011), B8(10000000)); //R1 Right Line In - WM8731_SendI2CCommand(B8(00001000), B8(00000101)); //R4 Analogue Audio Path Control - WM8731_SendI2CCommand(B8(00001100), B8(01101001)); //R6 Power Down Control - } -} - -// switch to RX mode (mute the microphone, etc.) -void WM8731_RX_mode(void) -{ - WM8731_SendI2CCommand(B8(00000000), B8(10000000)); //R0 Left Line In - WM8731_SendI2CCommand(B8(00000010), B8(10000000)); //R1 Right Line In - WM8731_SendI2CCommand(B8(00000101), B8(11111111)); //R2 Left Headphone Out - WM8731_SendI2CCommand(B8(00000111), B8(11111111)); //R3 Right Headphone Out - WM8731_SendI2CCommand(B8(00001000), B8(00010110)); //R4 Analogue Audio Path Control - WM8731_SendI2CCommand(B8(00001010), B8(00010000)); //R5 Digital Audio Path Control - WM8731_SendI2CCommand(B8(00001100), B8(01100111)); //R6 Power Down Control -} - -// switch to mixed RX-TX mode (for LOOP) -void WM8731_TXRX_mode(void) //loopback -{ - WM8731_SendI2CCommand(B8(00000101), B8(11111111)); //R2 Left Headphone Out - WM8731_SendI2CCommand(B8(00000111), B8(11111111)); //R3 Right Headphone Out - WM8731_SendI2CCommand(B8(00001010), B8(00010000)); //R5 Digital Audio Path Control - if (TRX.InputType_LINE) //line - { - WM8731_SendI2CCommand(B8(00000000), B8(00010111)); //R0 Left Line In - WM8731_SendI2CCommand(B8(00000010), B8(00010111)); //R1 Right Line In - WM8731_SendI2CCommand(B8(00001000), B8(00010010)); //R4 Analogue Audio Path Control - WM8731_SendI2CCommand(B8(00001100), B8(01100010)); //R6 Power Down Control, internal crystal - } - if (TRX.InputType_MIC) //mic - { - WM8731_SendI2CCommand(B8(00000001), B8(10000000)); //R0 Left Line In - WM8731_SendI2CCommand(B8(00000011), B8(10000000)); //R1 Right Line In - WM8731_SendI2CCommand(B8(00001000), B8(00010101)); //R4 Analogue Audio Path Control - WM8731_SendI2CCommand(B8(00001100), B8(01100001)); //R6 Power Down Control, internal crystal - } -} - -void WM8731_Mute(void) -{ - WM8731_Muting = true; - HAL_GPIO_WritePin(MUTE_GPIO_Port, MUTE_Pin, GPIO_PIN_RESET); -} - -void WM8731_UnMute(void) -{ - WM8731_Muting = false; - HAL_GPIO_WritePin(MUTE_GPIO_Port, MUTE_Pin, GPIO_PIN_SET); -} - -void WM8731_Beep(void) -{ - if(TRX.Beeper) - { - WM8731_Beeping = true; - HAL_Delay(50); - WM8731_Beeping = false; - } -} - -// initialize the audio codec over I2C -void WM8731_Init(void) -{ - if (WM8731_SendI2CCommand(B8(00011110), B8(00000000)) != 0) //R15 Reset Chip - { - sendToDebug_strln("[ERR] Audio codec not found"); - LCD_showError("Audio codec init error", true); - } - WM8731_SendI2CCommand(B8(00000101), B8(10000000)); //R2 Left Headphone Out Mute - WM8731_SendI2CCommand(B8(00000111), B8(10000000)); //R3 Right Headphone Out Mute - WM8731_SendI2CCommand(B8(00001110), B8(00001110)); //R7 Digital Audio Interface Format, Codec Slave, 32bits, I2S Format, MSB-First left-1 justified - WM8731_SendI2CCommand(B8(00010000), B8(00000000)); //R8 Sampling Control normal mode, 256fs, SR=0 (MCLK@12.288Mhz, fs=48kHz)) - WM8731_SendI2CCommand(B8(00010010), B8(00000001)); //R9 reactivate digital audio interface - WM8731_SendI2CCommand(B8(00000000), B8(10000000)); //R0 Left Line In - WM8731_SendI2CCommand(B8(00000010), B8(10000000)); //R1 Right Line In - WM8731_SendI2CCommand(B8(00001000), B8(00010110)); //R4 Analogue Audio Path Control - WM8731_SendI2CCommand(B8(00001010), B8(00010000)); //R5 Digital Audio Path Control - WM8731_SendI2CCommand(B8(00001100), B8(01100111)); //R6 Power Down Control - WM8731_UnMute(); -} - -// RX Buffer is fully sent to the codec -void HAL_I2SEx_TxRxCpltCallback(I2S_HandleTypeDef *hi2s) -{ - if (hi2s->Instance == SPI3) - { - if (Processor_NeedRXBuffer) // if the audio codec did not provide data to the buffer, raise the error flag - { - WM8731_Buffer_underrun = true; - } - WM8731_DMA_state = true; - Processor_NeedRXBuffer = true; - if (CurrentVFO()->Mode == TRX_MODE_LOOPBACK) - Processor_NeedTXBuffer = true; - WM8731_DMA_samples += (CODEC_AUDIO_BUFFER_SIZE / 2); - } -} - -// RX Buffer half sent to the codec -void HAL_I2SEx_TxRxHalfCpltCallback(I2S_HandleTypeDef *hi2s) -{ - if (hi2s->Instance == SPI3) - { - if (Processor_NeedRXBuffer) // if the audio codec did not provide data to the buffer, raise the error flag - { - WM8731_Buffer_underrun = true; - } - WM8731_DMA_state = false; - Processor_NeedRXBuffer = true; - if (CurrentVFO()->Mode == TRX_MODE_LOOPBACK) - Processor_NeedTXBuffer = true; - WM8731_DMA_samples += (CODEC_AUDIO_BUFFER_SIZE / 2); - } -} - -static void UA3REO_I2SEx_TxRxDMAHalfCplt(DMA_HandleTypeDef *hdma) -{ - I2S_HandleTypeDef* hi2s = (I2S_HandleTypeDef*)((DMA_HandleTypeDef*)hdma)->Parent; - HAL_I2SEx_TxRxHalfCpltCallback(hi2s); -} - -static void UA3REO_I2SEx_TxRxDMACplt(DMA_HandleTypeDef *hdma) -{ - I2S_HandleTypeDef* hi2s = (I2S_HandleTypeDef*)((DMA_HandleTypeDef*)hdma)->Parent; - HAL_I2SEx_TxRxCpltCallback(hi2s); -} - -static void UA3REO_I2SEx_DMAErr(DMA_HandleTypeDef *hdma) -{ - sendToDebug_str("err"); -} - -static void I2SEx_Fix(I2S_HandleTypeDef *hi2s) -{ - hi2s->hdmarx->XferHalfCpltCallback = NULL; - hi2s->hdmatx->XferHalfCpltCallback = UA3REO_I2SEx_TxRxDMAHalfCplt; - hi2s->hdmarx->XferCpltCallback = NULL; - hi2s->hdmatx->XferCpltCallback = UA3REO_I2SEx_TxRxDMACplt; - hi2s->hdmarx->XferErrorCallback = NULL; - hi2s->hdmatx->XferErrorCallback = UA3REO_I2SEx_DMAErr; -} \ No newline at end of file diff --git a/Src/wm8731.h b/Src/wm8731.h deleted file mode 100644 index 463259b..0000000 --- a/Src/wm8731.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef WM8731_h -#define WM8731_h - -#include "stm32f4xx_hal.h" -#include -#include "audio_processor.h" -#include "functions.h" - -#define I2C_ADDRESS_WM8731 0x34 //audio codec address -#define CODEC_AUDIO_BUFFER_SIZE (AUDIO_BUFFER_SIZE * 2) //the size of the circular buffer is 2 times larger than the FPGA buffer, we work in the first half, then on the other -#define CODEC_AUDIO_BUFFER_HALF_SIZE AUDIO_BUFFER_SIZE //half buffer - -//Public variables -extern int32_t CODEC_Audio_Buffer_RX[CODEC_AUDIO_BUFFER_SIZE]; -extern int32_t CODEC_Audio_Buffer_TX[CODEC_AUDIO_BUFFER_SIZE]; -extern bool WM8731_DMA_state; //what part of the buffer are we working with, true - complete; false - half -extern bool WM8731_Buffer_underrun; //lack of data in the buffer from the audio processor -extern uint32_t WM8731_DMA_samples; //count the number of samples transmitted to the audio codec -extern bool WM8731_Beeping; //Beeping flag -extern bool WM8731_Muting; //Muting flag - -//Public methods -extern void WM8731_Init(void); //I2C audio codec initialization -extern void WM8731_start_i2s_and_dma(void); //I2S bus start -extern void WM8731_CleanBuffer(void); //clear the audio codec and USB audio buffer -extern void WM8731_TX_mode(void); //switch to TX mode (mute the speaker, etc.) -extern void WM8731_RX_mode(void); //switching to RX mode (mute the microphone, etc.) -extern void WM8731_TXRX_mode(void); //switch to mixed mode RX-TX (for LOOP) -extern void WM8731_Mute(void); //mute audio out -extern void WM8731_UnMute(void); //disable audio mute -extern void WM8731_Beep(void); //beep on key press -#endif